ich bin newbie, habe mein erstes Gästebuch erstellt und bin ganz happy, dass es wirklich funktioniert. Jetzt wollte ich es mit eurem captcha schützen. Etliche Stunden und viele graue Haare später klappte es auch endlich. Jetzt wollte ich gern
1) Ins Formular ein Hidden Feld einfügen, das leer sein muss, damit das Skript ausgeführt wird (die Bots sollen nämlich oft alle Formularfelder ausfüllen)
2) es dem user ermöglichen, auch ohne email Angabe einen Kommentar schreiben zu können.
Leider springt mir das Skript immer aus der if Schleife zum letzten else Teil mit der Sicherheitsfehlermeldung. Warum ?!
Hier der - relevante - Code
<?php
session_start();
?>
...jede Menge html...
<table border="0" cellspacing="0" cellpadding="0" height=600 width="650">
<tr>
<td width=50 height=30></td>
<td width=600></td>
</tr>
<tr>
<td height=30 ></td>
<td height=30 ><h1>Was ihr so denkt...</h1></td>
</tr>
<tr>
<td ><img src="images/space.gif" height=1 width=20 ></td>
<td bgcolor=#2F2FAF><img src="images/space.gif" height=1 width=630 ></td>
</tr>
<tr>
<td></td>
<td> </td>
</tr>
<tr>
<td></td>
<td valign="top">
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">Euer Kommentar:<br><br>
<table border=0 width=300 cellspacing=2 cellpadding=2>
<tr><td colspan=2><textarea cols="55" rows="4" name="comment"></textarea></td></tr>
<tr><td width=50>Name:</td><td><input type="text" size="50" name="name"></td></tr>
<tr><td>E-Mail-Adresse:</td><td> <input type="text" size="50" name="email"></td></tr>
<tr><td colspan=2><input type="hidden" size="50" name="versteckt"></td></tr>
<tr><td><img src="rechencaptcha.php"></td><td><input type="text" name="sicherheitscode" size="50"></td></tr>
<tr><td colspan=2><input type="submit" name="senden" value="Anzeigen"></td></tr>
</table>
</form>
<table width=300 cellspacing=2 cellpadding=2>
<tr><td><h1>Was andere fanden...</h1></td></tr>
<tr><td>
<?php
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "123456789");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if (isset($_POST['senden'])){
if(isset($_SESSION['rechen_captcha_spam']) AND $sicherheits_eingabe == $_SESSION['rechen_captcha_spam'] AND $_POST['versteckt']=="" ){
unset($_SESSION['rechen_captcha_spam']);
// Dateiname in Variable speichern
$datei = "commentneu.txt";
// Variable Kommentar gesetzt? Name und E-Mail nicht leer?
if (isset($_POST['comment']) && $_POST['name'] != "" ){
$comment = $_POST['comment'];
$name = $_POST['name'];
$email = $_POST['email'];
// Datei wird zum Schreiben-Lesen geöffnet
$zeiger = fopen($datei, "r+");
// alte Daten herauslesen und in $alt sichern
$alt = fread($zeiger, filesize($datei));
// E-Mail-Link entsteht
$email = "<a href=\"mailto:$email\">$email</a>";
// Datum ermitteln und formatieren
$datum = date("j.n.Y");
// HTML-Zeichen maskieren, Slashes entfernen, Zeilenumbrüche erhalten
$comment = htmlspecialchars($comment);
$comment = stripslashes(nl2br($comment));
// Meinung "zusammensetzen"
if ($email==""){
$meinung="<p><b>$name</b> schrieb am <i>$datum</i>:<br>$comment</p>\n";
}
else{
$meinung="<p><b>$name</b> ($email) schrieb am <i>$datum</i>:<br>$comment</p>\n";
}
// unsichtbarer Cursor marschiert zum Anfang
rewind($zeiger);
// neue Meinung vor alte in Datei schreiben:
fputs($zeiger, "$meinung \n $alt");
// Datei schließen
fclose($zeiger);
// Datei komplett anzeigen
readfile($datei);
}
ELSE {
echo("Bitte Name und Kommentar eingeben!");
}
}
ELSE {
echo("Der Sicherheitscode ist falsch!");
}
}
?>
