Hallo,
ich habe mein Kontakformular nochmal ein wenig überarbeitet...
Ich fand diese Captcha Uhr sehr nett, also habe ich diese anstatt dem "klassischen" Captcha verwendet.
Wenn ich bei captcha.php eine Session starte,
kann ich diese ja auch in meinem kontakt.php "weiterführen" laut http://www.php-kurs.com/session-anwenden.htm,
wenn ich das richtig verstanden habe.
So sollte die Session des captcha.php wieder aufgenommen werden und ich kann über eine Bedingung eine
Fehlermeldung ausgeben und die Session löschen.
Jedenfalls scheint dies nicht zu klappen und lokal kommt keine Fehlermeldung,
aber egal wie oft ich das Captcha richtig eintippe,
die Nachricht wird nicht versendet (weil das captcha falsch eingetippt wurde).
Ich habe das ganze auf den Server hochgeladenlicht-fische.bplaced.net/kontakt.php
und dort erscheint eine Session Fehlermeldung.
Was habe ich falsch gemacht?
Das ist der Kontakt.php Code:
<div id="inhalt">
<?php
session_start();
//kontaktformulardaten des absenders
if (isset($_POST['absender'])) $absender = $_POST['absender'];
if (isset($_POST['betreff'])) $betreff = $_POST['betreff'];
if (isset($_POST['email'])) $email = $_POST['email'];
if (isset($_POST['inhalt'])) $inhalt = $_POST['inhalt'];
//meine Daten
$emailbetreff = "websitekontakt";
$webmaster = "ich@beispiel.bsp";
//fehler
$fehler = "";
if (isset($_POST["senden"]))
{
//captcha korrekt?
if(isset($SESSION['captcha']) AND $_POST['sicherheitscode'] ==
$SESSION['captcha']){
//wenn ja, session löschen
unset($SESSION['captcha']);
}
else {
$fehler .= "fehler";
echo "Der Sicherheitscode wurde falsch abgetippt!";
}
//Absender eingegeben?
if (empty($_POST['absender']))
{ $fehler .= "fehler";
echo "Bitte ergänzen Sie Absender!";
}
//Betreff eingegeben?
if (empty($_POST['betreff']))
{ $fehler .= "fehler";
echo "Bitte ergänzen Sie den Betreff!";
}
//Nachricht eingegeben?
if (empty($_POST['inhalt']))
{ $fehler .= "fehler";
echo "Ohne Nachricht kein Kontakt!";
}
//wenn 0 fehler, dann nachricht versenden
if($fehler == "")
{
$body = <<<EOD
<br><hr><br>
Absender: $absender <br>
Betreff: $betreff <br>
Email: $email <br>
Inhalt: $inhalt <br>
EOD;
$headers = "From: $email\r\n";
$headers .= "Content-type: text/html\r\n";
$headers = mail($webmaster, $emailbetreff, $body, $headers);
echo "Ihre Nachricht wurde erfolgreich versendet!";
} }
?>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post" >
Absender:<br />
<input type="text" name="absender" id="absender" value="" size="20" maxlength="50" /> <br />
Betreff: <br />
<input type="text" name="betreff" id="betreff" value="" size="20" maxlength="50" /><br />
Ihre Email Adresse:<br />
<input type="text" name="email" id="email" value="" size="20" maxlength="50" /><br />
Ihre Nachricht: <br />
<textarea name="inhalt" id="ihnalt" rows="8" cols="40"></textarea><br />
Bitte geben Sie folgende Ziffern ein: <br />
<img src="/captcha/captcha.php" id="sicherheitscode" border="0" title="sicherheitscode"/><br />
<!--<label for="captcha">Sicherheitscode</label>-->
<input type="text" name="sicherheitscode" size="20" maxlength="5" /><br />
<p><input type="submit" value="Nachricht absenden" name="senden" /></p>
</form>
</div>
Alles anzeigen
und der captcha.php code
<?php
session_start();
// alle moeglichen Zeichen ohne Problemfälle
$moegliche_zeichen = "A B C D E F G H J K M N Q R T U V W X Y 2 3 4 5 7 8";
// erstellen eines Arrays
$kombinationen = explode(" ", $moegliche_zeichen);
// mischen des Arrays
shuffle ( $kombinationen );
// die ersten 6 Zeichen aus dem gemischten Array
$text = array_slice($kombinationen, 0, 5);
// Speicherung in SESSION-Variable für spätere Auswertung
$SESSION['captcha'] = $text;
Header ("Content-type: image/png");
// Laden der Rohdatei, die sich im Verzeichnis befinden muss
$bild = ImageCreateFromPNG ("captcha-clock.png");
// Farben definieren
$farbe_w = ImageColorAllocate ($bild, 255, 255, 255);
$farbe_b = ImageColorAllocate ($bild, 0, 0, 0);
// die verwendete Schrift-Datei arial.ttf muss vorhanden sein
// Aufbau Schriftgröße, Winkel, X-Pos., Y-Pos, Farbe, Schrift, Inhalt
ImageTTFText ($bild, 32, -30, 140, 70, $farbe_b, "COUR.TTF", $text[0]);
ImageTTFText ($bild, 32, -90, 180, 130, $farbe_b, "CORBEL.TTF", $text[1]);
ImageTTFText ($bild, 32, 0, 130, 210, $farbe_b, "CALIBRI.TTF", $text[2]);
ImageTTFText ($bild, 32, 45, 80, 190, $farbe_b, "COUR.TTF", $text[3]);
ImageTTFText ($bild, 32, 99, 80, 120, $farbe_b, "CORBEL.TTF", $text[4]);
// Ausgabe im Format PNG
ImagePng ($bild);
// Ressourcen wieder freigeben
ImageDestroy ($bild);
?>
Alles anzeigen