javascript + captcha + session var

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • javascript + captcha + session var

    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

    Quellcode

    1. <script language="JavaScript">
    2. <!--
    3. function formcheck() {
    4. form = document.reg_fm;
    5. error = "";
    6. //Textfelder überprüfen --->
    7. if (form.firstname.value == "") {
    8. error = "Vorname fehlt\n";
    9. }
    10. if (form.lastname.value == "") {
    11. error += "Nachname fehlt\n";
    12. }
    13. if (form.email.value == "") {
    14. error += "Emailadresse fehlt\n";
    15. }
    16. //Fehlerausgabe --->
    17. if (error != "") {
    18. errormsg = "Die folgenenden Angaben wurden nicht gemacht:\n\n";
    19. errormsg += error;
    20. alert(errormsg);
    21. //Die Rückgabe eines Wertes über die Anweisung
    22. //"return" führt zu einem Abbruch der Funktion
    23. return false;
    24. }
    25. return true;
    26. }
    27. //-->
    28. </script>
    Alles anzeigen


    reguser.php

    Quellcode

    1. <form name="reg_fm" action="<?php $PHP_SELF; ?>" method="POST" onSubmit="return formcheck()">
    2. <input type="hidden" name="secode" value="<?php echo $_SESSION['captcha_spam']; ?>">
    3. <table width="100%" border="0">
    4. <td width="35%" style="*width:33%;">Benutzername:</td><td width="60%" style="float:left;"><input type="text" name="username" id="username"></td></tr>
    5. <td width="35%" style="*width:33%;">Passwort:</td><td width="60%" style="float:left;"><input type="password" name="password" id="password"></td></tr>
    6. </table>
    7. <br>
    8. <hr>
    9. <br>
    10. <table width="100%" border="0">
    11. <tr><td width="40%">Vorname:</td><td width="60%" style="float:left;"><input type="text" name="firstname" id="firstname"></td></tr>
    12. <tr><td width="40%">Nachname:</td><td width="60%" style="float:left;"><input type="text" name="lastname" id="lastname"></td></tr>
    13. <tr><td width="40%">Emailadresse:</td><td width="60%" style="float:left;"><input type="text" name="email" id="email"></td></tr>
    14. <tr><td width="40%">Telefonnummer:</td><td width="60%" style="float:left;"><input type="text" name="phone" id="phone"></td></tr>
    15. <tr><td width="40%">Stra&szlig;e / Hausnummer:</td><td width="60%" style="float:left;"><input type="text" name="street" id="street">&nbsp;<input type="text" name="nr" id="nr" size="3"></td></tr>
    16. <tr><td width="40%">Postleitzahl / Ort:</td><td width="60%" style="float:left;"><input type="text" name="zipcode" id="zipcode" size="5">&nbsp;<input type="text" name="city" id="city"></td></tr>
    17. <tr><td width="40%">Land:</td><td width="60%" style="float:left;">
    18. <tr>
    19. <td><img src="captcha/captcha.php" border="0" title="Sicherheitscode"></td>
    20. <td><input type="text" name="sicherheitscode" size="5"></td>
    21. </tr>
    22. </td></tr>
    23. </table>
    24. <br>
    25. <hr>
    26. <br>
    27. <table width="100%" border="0">
    28. <tr><td width="40%"></td><td width="60%" style="float:right;"><input type="Submit" name="register" id="register" value="Registrieren"></td></tr>
    29. </table>
    30. </form>
    Alles anzeigen


    captcha.php

    Quellcode

    1. <?php
    2. session_start();
    3. unset($_SESSION['captcha_spam']);
    4. function randomString($len) {
    5. function make_seed(){
    6. list($usec , $sec) = explode (' ', microtime());
    7. return (float) $sec + ((float) $usec * 100000);
    8. }
    9. srand(make_seed());
    10. //Der String $possible enthält alle Zeichen, die verwendet werden sollen
    11. $possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
    12. $str="";
    13. while(strlen($str)<$len) {
    14. $str.=substr($possible,(rand()%(strlen($possible))),1);
    15. }
    16. return($str);
    17. }
    18. $text = randomString(5); //Die Zahl bestimmt die Anzahl stellen
    19. $_SESSION['captcha_spam'] = $text;
    20. header('Content-type: image/png');
    21. $img = ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
    22. $color = ImageColorAllocate($img, 0, 0, 0); //Farbe
    23. $ttf = $_SERVER['DOCUMENT_ROOT']."/captcha/XFILES.TTF"; //Schriftart
    24. $ttfsize = 25; //Schriftgrösse
    25. $angle = rand(0,5);
    26. $t_x = rand(5,30);
    27. $t_y = 35;
    28. imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
    29. imagepng($img);
    30. imagedestroy($img);
    31. ?>
    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
    Das Leben ist binär - du bist eine 1, oder eine 0