[Homepage] register Frage

  • [Homepage] register Frage

    Hallo Com,
    ich habe hier mal mein register script, aber iwie kann ich beim Captcha eingeben was ich will,
    hat vllt jmd nen Fix dafür?

    PHP-Quellcode

    1. <h1>Registration</h1><div class="site"> <?php if(!isset($_POST['reg_username'])) $_POST['reg_username'] = ''; if(!isset($_POST['reg_email'])) $_POST['reg_email'] = ''; odbc_exec($mssql, 'USE [ACCOUNT_DBF]'); $checkacc = odbc_exec($mssql, 'SELECT COUNT(*) as count FROM [ACCOUNT_TBL] WHERE account=\''.mssql_escape_string($_POST['reg_username']).'\''); $checkmail = odbc_exec($mssql, 'SELECT COUNT(*) as count FROM [ACCOUNT_TBL_DETAIL] WHERE email=\''.mssql_escape_string($_POST['reg_email']).'\''); $errors = array(); if(empty($_POST['reg_username']) || empty($_POST['reg_password']) || empty($_POST['reg_confirmpw']) || empty($_POST['reg_email']) || empty($_POST['reg_check']) || empty($_POST['reg_captcha'])) $errors[] = 'Du musst alle Felder ausf&uuml;llen!'; if(!empty($_POST['reg_username']) && odbc_result($checkacc, 'count') > 0) $errors[] = 'Der Benutzername existiert bereits!'; if(!empty($_POST['reg_email']) && odbc_result($checkmail, 'count') > 0) $errors[] = 'Die E-Mail Adresse existiert bereits!'; if(!empty($_POST['reg_username']) && (strlen($_POST['reg_username']) > 10 || strlen($_POST['reg_username']) < 4)) $errors[] = 'Dein Benutzername muss 4 - 10 Zeichen enthalten!'; if(!empty($_POST['reg_password']) && (strlen($_POST['reg_password']) > 12 || strlen($_POST['reg_password']) < 6)) $errors[] = 'Dein Passwort muss 6 - 12 Zeichen enthalten!'; if((!empty($_POST['reg_password']) && !empty($_POST['reg_confirmpw'])) && $_POST['reg_password'] != $_POST['reg_confirmpw']) $errors[] = 'Deine Passwort Wiederholung stimmt nicht!'; if(!empty($_POST['reg_email']) && !preg_match('/^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2,4}$/', $_POST['reg_email'])) $errors[] = 'Die E-Mail Adresse ist nicht valide'; if(isset($_POST['reg_submit'])) { if(count($errors) > 0) { echo '<div class="fail">'; foreach($errors as $error) { echo $error.'<br/>'; } echo '</div>'; } else { odbc_exec($mssql, 'INSERT INTO [dbo].[ACCOUNT_TBL] (account, password, isuse, member, id_no1, id_no2, realname, reload, OldPassword, TempPassword, cash , votepoints) VALUES (N\''.mssql_escape_string($_POST['reg_username']).'\', N\''.mssql_escape_string(md5($_CONFIG['pwdsalt'].$_POST['reg_password'])).'\', N\'T\', N\'A\', NULL, 0, N\'P\', NULL, 0, NULL, 0, 0)'); odbc_exec($mssql, 'INSERT INTO [dbo].[ACCOUNT_TBL_DETAIL] (account, gamecode, tester, m_chLoginAuthority, regdate, BlockTime, EndTime, WebTime, isuse, secession, email) VALUES (N\''.mssql_escape_string($_POST['reg_username']).'\', N\'A000\', N\'2\', N\'F\', \''.mssql_escape_string(date('Ymd H:i:s')).'\', N\'20010101\', N\'20990101\', N\'20050101\', N\'O\', NULL, N\''.mssql_escape_string($_POST['reg_email']).'\')'); echo '<div class="success">Dein Account wurde erfolgreich erstellt!</div>'; } } ?> <form method="post"> <table> <tr> <td>Benutzername:</td> <td><input type="text" name="reg_username" maxlength="10" /></td> </tr> <tr> <td>Passwort:</td> <td><input type="password" name="reg_password" maxlength="11" /></td> </tr> <tr> <td>Wdh. Passwort:</td> <td><input type="password" name="reg_confirmpw" /></td> </tr> <tr> <td>E-Mail:</td> <td><input type="text" name="reg_email" /></td> </tr> <tr> <td><img src="./inc/captcha.php" name="captcha" /></td> <td><input type="text" name="reg_captcha" maxlength="5" /></td> </tr> <tr> <td></td> <td><input type="submit" name="reg_submit" value="Account erstellen" /></td> </tr> </table> </form></div>

    wie baue ich jetzt die Captcha abfrage ein?

    Danke
    MfG
    .:Flyff:.
  • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

  • Selbst dann ist es falsch, da ein Captcha ja aus 2 Teilen besteht.

    Richtig wäre in dem fall :

    PHP-Quellcode

    1. if(empty($_POST['reg_captcha']) || md5($_POST['reg_captcha']) != md5($_POST['captcha'])) $errors[] = 'Das Captcha ist nicht oder falsch angegeben.';

    Wobei ich sagen muss das ich bezweifel das dass Captcha so erstellt werden kann :

    PHP-Quellcode

    1. <td><img src="./inc/captcha.php" name="captcha" /></td>
    2. <td><input type="text" name="reg_captcha" maxlength="5" /></td>


    Ich gehe stark von aus das man die captcha.php so ändern muss das man die Captcha Variable erstellen muss und dann im GET an die captcha.php ergeben muss im img und die captcha.php wird dann zum Bild einfach nur. ( Da hilft auch das Script von mir mit dem Bild erstellen , man muss nur die richtigen einstellungen machen ;-) )
    Zumindest mach ich es so. Und erstellen tue ich die Captcha variable immer mit der funktion :

    PHP-Quellcode

    1. function createcaptchacode($varlong){
    2. $captcha = "";
    3. $pool = "qwertzupasdfghkyxcvbnm23456789WERTZUPLKJHGFDSAYXCVBNM";
    4. srand ((double)microtime()*1000000);
    5. for($i=1;$i<=$varlong;$i++) {
    6. $captcha .= substr($pool,(rand()%(strlen ($pool))), 1);
    7. }
    8. return $captcha;
    9. }


    Dann sieht mein Script so aus :

    PHP-Quellcode

    1. <?php
    2. function createcaptcha($varlong){
    3. $captcha = "";
    4. $pool = "qwertzupasdfghkyxcvbnm23456789WERTZUPLKJHGFDSAYXCVBNM";
    5. srand ((double)microtime()*1000000);
    6. for($i=1;$i<=$varlong;$i++) {
    7. $captcha .= substr($pool,(rand()%(strlen ($pool))), 1);
    8. }
    9. return $captcha;
    10. }
    11. $cre_captcha = createcaptcha('10');
    12. ?>
    13. <h1>Registration</h1>
    14. <div class="site">
    15. <?php
    16. if(!isset($_POST['reg_username'])) $_POST['reg_username'] = '';
    17. if(!isset($_POST['reg_email'])) $_POST['reg_email'] = '';
    18. odbc_exec($mssql, 'USE [ACCOUNT_DBF]');
    19. $checkacc = odbc_exec($mssql, 'SELECT COUNT(*) as count FROM [ACCOUNT_TBL] WHERE account=\''.mssql_escape_string($_POST['reg_username']).'\'');
    20. $checkmail = odbc_exec($mssql, 'SELECT COUNT(*) as count FROM [ACCOUNT_TBL_DETAIL] WHERE email=\''.mssql_escape_string($_POST['reg_email']).'\'');
    21. $errors = array();
    22. if(empty($_POST['reg_username']) || empty($_POST['reg_password']) || empty($_POST['reg_confirmpw']) || empty($_POST['reg_email']) || empty($_POST['reg_check']) || empty($_POST['reg_captcha'])) $errors[] = 'Du musst alle Felder ausf&uuml;llen!';
    23. if(!empty($_POST['reg_username']) && odbc_result($checkacc, 'count') > 0) $errors[] = 'Der Benutzername existiert bereits!';
    24. if(!empty($_POST['reg_email']) && odbc_result($checkmail, 'count') > 0) $errors[] = 'Die E-Mail Adresse existiert bereits!';
    25. if(!empty($_POST['reg_username']) && (strlen($_POST['reg_username']) > 10 || strlen($_POST['reg_username']) < 4)) $errors[] = 'Dein Benutzername muss 4 - 10 Zeichen enthalten!';
    26. if(!empty($_POST['reg_password']) && (strlen($_POST['reg_password']) > 12 || strlen($_POST['reg_password']) < 6)) $errors[] = 'Dein Passwort muss 6 - 12 Zeichen enthalten!';
    27. if((!empty($_POST['reg_password']) && !empty($_POST['reg_confirmpw'])) && $_POST['reg_password'] != $_POST['reg_confirmpw']) $errors[] = 'Deine Passwort Wiederholung stimmt nicht!';
    28. if(!empty($_POST['reg_email']) && !preg_match('/^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2,4}$/', $_POST['reg_email'])) $errors[] = 'Die E-Mail Adresse ist nicht valide';
    29. if(!empty($_POST['reg_captcha']) || md5($_POST['reg_captcha']) != md5($_POST['captcha'])) $errors[] = 'Das Captcha ist nicht oder falsch angegeben.'; //Hier einfach abfragen
    30. if(isset($_POST['reg_submit'])) {
    31. if(count($errors) > 0) {
    32. echo '<div class="fail">';
    33. foreach($errors as $error) {
    34. echo $error.'<br/>';
    35. }
    36. echo '</div>';
    37. } else {
    38. odbc_exec($mssql, 'INSERT INTO [dbo].[ACCOUNT_TBL] (account, password, isuse, member, id_no1, id_no2, realname, reload, OldPassword, TempPassword, cash , votepoints) VALUES (N\''.mssql_escape_string($_POST['reg_username']).'\', N\''.mssql_escape_string(md5($_CONFIG['pwdsalt'].$_POST['reg_password'])).'\', N\'T\', N\'A\', NULL, 0, N\'P\', NULL, 0, NULL, 0, 0)');
    39. odbc_exec($mssql, 'INSERT INTO [dbo].[ACCOUNT_TBL_DETAIL] (account, gamecode, tester, m_chLoginAuthority, regdate, BlockTime, EndTime, WebTime, isuse, secession, email) VALUES (N\''.mssql_escape_string($_POST['reg_username']).'\', N\'A000\', N\'2\', N\'F\', \''.mssql_escape_string(date('Ymd H:i:s')).'\', N\'20010101\', N\'20990101\', N\'20050101\', N\'O\', NULL, N\''.mssql_escape_string($_POST['reg_email']).'\')');
    40. echo '<div class="success">Dein Account wurde erfolgreich erstellt!</div>';
    41. }
    42. }
    43. ?>
    44. <form method="post">
    45. <table>
    46. <tr>
    47. <td>Benutzername:</td>
    48. <td><input type="text" name="reg_username" maxlength="10" /></td>
    49. </tr>
    50. <tr>
    51. <td>Passwort:</td>
    52. <td><input type="password" name="reg_password" maxlength="11" /></td>
    53. </tr>
    54. <tr>
    55. <td>Wdh. Passwort:</td>
    56. <td><input type="password" name="reg_confirmpw" /></td>
    57. </tr>
    58. <tr>
    59. <td>E-Mail:</td>
    60. <td><input type="text" name="reg_email" /></td>
    61. </tr>
    62. <tr>
    63. <td><img src="./inc/captcha.php?cap=<?php echo $cre_captcha; ?>" /><input type="hidden" name="captcha" value="<?php echo $cre_captcha; ?>" /></td>
    64. <td><input type="text" name="reg_captcha" maxlength="10" /></td>
    65. </tr>
    66. <tr>
    67. <td></td>
    68. <td><input type="submit" name="reg_submit" value="Account erstellen" /></td>
    69. </tr>
    70. </table>
    71. </form>
    72. </div>
    Alles anzeigen



    Jetzt fehlt nur noch die passende Captcha.php ^^
    Und diese schaut zB so aus :

    PHP-Quellcode

    1. <?php
    2. header ("Content-type: image/png");
    3. $text = $_GET['cap'];
    4. $im_width = '120';
    5. $im_height = '17';
    6. $text_size = '5';
    7. $im = imagecreate ($im_width,$im_height);
    8. $background_color = ImageColorAllocate ($im, 0, 0, 0);
    9. $text_color = ImageColorAllocate ($im, 217, 165, 70);
    10. ImageString($im,$text_size,'7','1',$text,$text_color);
    11. ImagePNG ($im);
    12. ?>
    Alles anzeigen
  • Und so siehts bei mir aus:
    Captcha.php

    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. $img = ImageCreateFromPNG('../images/captcha.png'); //Backgroundimage
    21. $color = ImageColorAllocate($img, 0, 0, 0); //Farbe
    22. $ttf = $_SERVER['DOCUMENT_ROOT']."./captcha/ARIAL.TTF"; //Schriftart
    23. $ttfsize = 11; //Schriftgrösse
    24. $angle = rand(0,5);
    25. $t_x = rand(1,8);
    26. $t_y = 14;
    27. imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
    28. header('Content-type: image/png');
    29. imagejpeg($img);
    30. imagedestroy($img);
    31. ?>
    Alles anzeigen


    PHP-Quellcode

    1. <img src="captcha/captcha.php" border="0" title="Sicherheitscode">
    2. <input name="Sicherheitscode" type="text" maxlength="5" />


    dazu die abfrage noch:

    PHP-Quellcode

    1. if($_POST['Sicherheitscode'] != $_SESSION['captcha_spam']){
    2. $error = "bblabla code falsch blabla";
    3. }



    fertig.
  • Dancex3;280639 schrieb:

    Und so siehts bei mir aus:
    Captcha.php

    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. $img = ImageCreateFromPNG('../images/captcha.png'); //Backgroundimage
    21. $color = ImageColorAllocate($img, 0, 0, 0); //Farbe
    22. $ttf = $_SERVER['DOCUMENT_ROOT']."./captcha/ARIAL.TTF"; //Schriftart
    23. $ttfsize = 11; //Schriftgrösse
    24. $angle = rand(0,5);
    25. $t_x = rand(1,8);
    26. $t_y = 14;
    27. imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
    28. header('Content-type: image/png');
    29. imagejpeg($img);
    30. imagedestroy($img);
    31. ?>
    Alles anzeigen


    PHP-Quellcode

    1. <img src="captcha/captcha.php" border="0" title="Sicherheitscode">
    2. <input name="Sicherheitscode" type="text" maxlength="5" />


    dazu die abfrage noch:

    PHP-Quellcode

    1. if($_POST['Sicherheitscode'] != $_SESSION['captcha_spam']){
    2. $error = "bblabla code falsch blabla";
    3. }



    fertig.


    Du hast schon gemerkt das dem sein Ausschnitt bereits included wird nur? Somit ist es zumindest an dieser Stelle nicht mehr möglich eine Session zu starten ;-)

    Also muss das session_start(); in die index.php oder welche Datei die Hauptdatei auch immer ist ganz oben herein. Sonst kann keine Session im Script abgerufen werden.

    Und wirklich sinnig ist es auch nicht hier an der Stelle mit Session zu arbeiten. Extra dafür eine Session starten wenn man ohne arbeitet? Dann lieber über POST. Da kann auch keiner rein fuschen.