Hi zusammen,
Ich versuche gerade ein Anmeldeformular mit Captcha abzusichern, das klappt soweit auch ganz gut. Ich habe eine reguser.php welche in der index.php included wird. In der index habe ich im head das javascript welches die validierung vornimmt. in der reguser.php habe includiere ich die captcha.php. Alles gut soweit.
Mein Problem ist das im Head bereits im Javascript die SESSION-Variable eingelesen wird welche zur Captcha Darstellung genutzt wird, aber eben immer die letzte, denn natürlich wird die aktuelle erst später beim includen der captcha.php erstellt. Dadurch passt es natürlich nie.
Hier der Code:
index.php
Alles anzeigen
reguser.php
Alles anzeigen
captcha.php
Alles anzeigen
Ich müsste es folglich entweder schaffen daß das java-validate erst nach dem includen der captcha.php stattfindet, oder aber nach dem includen die java-variable welche die sessionvar mit dem generierten captcha enthält updaten.
Irgendwie komm ich da nicht weiter. Ich möchte es unbedingt in der Validierung haben bevor das Form abgeschickt wird (stichwort usabilty) - es danach auszugeben und dann mit zurück zu arbeiten ist nicht das Ziel.
Grüße,
Matthias
Ich versuche gerade ein Anmeldeformular mit Captcha abzusichern, das klappt soweit auch ganz gut. Ich habe eine reguser.php welche in der index.php included wird. In der index habe ich im head das javascript welches die validierung vornimmt. in der reguser.php habe includiere ich die captcha.php. Alles gut soweit.
Mein Problem ist das im Head bereits im Javascript die SESSION-Variable eingelesen wird welche zur Captcha Darstellung genutzt wird, aber eben immer die letzte, denn natürlich wird die aktuelle erst später beim includen der captcha.php erstellt. Dadurch passt es natürlich nie.
Hier der Code:
index.php
Quellcode
- <script language="JavaScript">
- <!--
- function formcheck() {
- form = document.reg_fm;
- error = "";
- //Textfelder überprüfen --->
- if (form.firstname.value == "") {
- error = "Vorname fehlt\n";
- }
- if (form.lastname.value == "") {
- error += "Nachname fehlt\n";
- }
- if (form.email.value == "") {
- error += "Emailadresse fehlt\n";
- }
- //Fehlerausgabe --->
- if (error != "") {
- errormsg = "Die folgenenden Angaben wurden nicht gemacht:\n\n";
- errormsg += error;
- alert(errormsg);
- //Die Rückgabe eines Wertes über die Anweisung
- //"return" führt zu einem Abbruch der Funktion
- return false;
- }
- return true;
- }
- //-->
- </script>
reguser.php
Quellcode
- <form name="reg_fm" action="<?php $PHP_SELF; ?>" method="POST" onSubmit="return formcheck()">
- <input type="hidden" name="secode" value="<?php echo $_SESSION['captcha_spam']; ?>">
- <table width="100%" border="0">
- <td width="35%" style="*width:33%;">Benutzername:</td><td width="60%" style="float:left;"><input type="text" name="username" id="username"></td></tr>
- <td width="35%" style="*width:33%;">Passwort:</td><td width="60%" style="float:left;"><input type="password" name="password" id="password"></td></tr>
- </table>
- <br>
- <hr>
- <br>
- <table width="100%" border="0">
- <tr><td width="40%">Vorname:</td><td width="60%" style="float:left;"><input type="text" name="firstname" id="firstname"></td></tr>
- <tr><td width="40%">Nachname:</td><td width="60%" style="float:left;"><input type="text" name="lastname" id="lastname"></td></tr>
- <tr><td width="40%">Emailadresse:</td><td width="60%" style="float:left;"><input type="text" name="email" id="email"></td></tr>
- <tr><td width="40%">Telefonnummer:</td><td width="60%" style="float:left;"><input type="text" name="phone" id="phone"></td></tr>
- <tr><td width="40%">Straße / Hausnummer:</td><td width="60%" style="float:left;"><input type="text" name="street" id="street"> <input type="text" name="nr" id="nr" size="3"></td></tr>
- <tr><td width="40%">Postleitzahl / Ort:</td><td width="60%" style="float:left;"><input type="text" name="zipcode" id="zipcode" size="5"> <input type="text" name="city" id="city"></td></tr>
- <tr><td width="40%">Land:</td><td width="60%" style="float:left;">
- <tr>
- <td><img src="captcha/captcha.php" border="0" title="Sicherheitscode"></td>
- <td><input type="text" name="sicherheitscode" size="5"></td>
- </tr>
- </td></tr>
- </table>
- <br>
- <hr>
- <br>
- <table width="100%" border="0">
- <tr><td width="40%"></td><td width="60%" style="float:right;"><input type="Submit" name="register" id="register" value="Registrieren"></td></tr>
- </table>
- </form>
captcha.php
Quellcode
- <?php
- session_start();
- unset($_SESSION['captcha_spam']);
- function randomString($len) {
- function make_seed(){
- list($usec , $sec) = explode (' ', microtime());
- return (float) $sec + ((float) $usec * 100000);
- }
- srand(make_seed());
- //Der String $possible enthält alle Zeichen, die verwendet werden sollen
- $possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
- $str="";
- while(strlen($str)<$len) {
- $str.=substr($possible,(rand()%(strlen($possible))),1);
- }
- return($str);
- }
- $text = randomString(5); //Die Zahl bestimmt die Anzahl stellen
- $_SESSION['captcha_spam'] = $text;
- header('Content-type: image/png');
- $img = ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
- $color = ImageColorAllocate($img, 0, 0, 0); //Farbe
- $ttf = $_SERVER['DOCUMENT_ROOT']."/captcha/XFILES.TTF"; //Schriftart
- $ttfsize = 25; //Schriftgrösse
- $angle = rand(0,5);
- $t_x = rand(5,30);
- $t_y = 35;
- imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
- imagepng($img);
- imagedestroy($img);
- ?>
Ich müsste es folglich entweder schaffen daß das java-validate erst nach dem includen der captcha.php stattfindet, oder aber nach dem includen die java-variable welche die sessionvar mit dem generierten captcha enthält updaten.
Irgendwie komm ich da nicht weiter. Ich möchte es unbedingt in der Validierung haben bevor das Form abgeschickt wird (stichwort usabilty) - es danach auszugeben und dann mit zurück zu arbeiten ist nicht das Ziel.
Grüße,
Matthias
Das Leben ist binär - du bist eine 1, oder eine 0