Bei Erweiterungen wird die Schleife verlassen

Hier werden Probleme rund um das Rechen Captcha behandelt

Moderator: frameguard

Bei Erweiterungen wird die Schleife verlassen

Beitragvon Doro » 19.08.2007, 22:39

Hallo zusammen,

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>&nbsp;</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!");
}


}



?>
Doro
 
Beiträge: 1
Registriert: 19.08.2007, 22:29

Beitragvon Steef389 » 24.08.2007, 11:36

So, hab mich jetzt dazu erbarmt, mir deinen Code mal anzuschauen.
Am Code selber ist nichts falsch, aber etwas, das du noch verbessern kannst.

Aber erstmal, warum funktioniert es nicht.
Stimmt der Code den du hier:
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "123456789");
eingegeben hast, mit dem Code der in der rechencaptcha.php stehet, überein?
Sonst fällt mir nichts ein, was diesen Fehler verursachen könnte.

Ach ja, die Überprüfung auf eine leere email hier:
Code: Alles auswählen
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";
}

ist sinnlos, da du davor das schreibst:
Code: Alles auswählen
$email = "<a href=\"mailto:$email\">$email</a>";

Wenn keine email eingegeben wurde ist es jetzt dieser String: <a href=\"mailto:\"></a>
Es ist zwar keine E-Mail vorhanden aber der String ist nicht leer.
Ich würde diese Zeile:
Code: Alles auswählen
$email = "<a href=\"mailto:$email\">$email</a>";

durch diese Zeile erstezen:
Code: Alles auswählen
$email = ( $email != "") ? "<a href=\"mailto:$email\">$email</a>" : ""
Steef389
 
Beiträge: 57
Registriert: 20.06.2007, 20:31


Zurück zu Rechen Captcha

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron