2013-05-03 105 views
0

我正尝试使用验证码创建一个注册表单,使用this tutorial,但我不知道如何验证验证码,你能帮助我吗?如何验证注册表单验证码?

<?php 

include ('php/mysql_prisijungimas.php'); 


if (isset($_POST['formsubmitted'])) { 
    $error = array();//Declare An Array to store any error message 
    if (empty($_POST['name'])) {//if no name has been supplied 
     $error[] = 'Please Enter a name ';//add to array "error" 
    } else { 
     $name = $_POST['name'];//else assign it a variable 
    } 

    if (empty($_POST['e-mail'])) { 
     $error[] = 'Please Enter your Email '; 
    } else { 


     if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) { 
      //regular expression for email validation 
      $Email = $_POST['e-mail']; 
     } else { 
      $error[] = 'Your EMail Address is invalid '; 
     } 


    } 


    if (empty($_POST['Password'])) { 
     $error[] = 'Please Enter Your Password '; 
    } else { 
     $Password = $_POST['Password']; 
    } 


    if (empty($error)) //send to Database if there's no error ' 

    { // If everything's OK... 

     // Make sure the email address is available: 
     $query_verify_email = "SELECT * FROM members WHERE Email ='$Email'"; 
     $result_verify_email = mysqli_query($dbc, $query_verify_email); 
     if (!$result_verify_email) {//if the Query Failed ,similar to if($result_verify_email==false) 
      echo ' Database Error Occured '; 
     } 

     if (mysqli_num_rows($result_verify_email) == 0) { // IF no previous user is using this email . 


      // Create a unique activation code: 
      $activation = md5(uniqid(rand(), true)); 


      $query_insert_user = "INSERT INTO `members` (`Username`, `Email`, `Password`, `Activation`) VALUES ('$name', '$Email', '$Password', '$activation')"; 


      $result_insert_user = mysqli_query($dbc, $query_insert_user); 
      if (!$result_insert_user) { 
       echo 'Query Failed '; 
      } 

      if (md5($_POST['norobot']) == $_SESSION['randomnr2']) { 
     // here you place code to be executed if the captcha test passes 
      echo "Hey great , it appears you are not a robot"; 
    } else { 
     // here you place code to be executed if the captcha test fails 
      echo "you're a very naughty robot!"; 
    } 

      if (mysqli_affected_rows($dbc) == 1) { //If the Insert Query was successfull. 


       // Send the email: 
       $message = " To activate your account, please click on this link:\n\n"; 
       $message .= WEBSITE_URL . '/activate.php?email=' . urlencode($Email) . "&key=$activation"; 
       mail($Email, 'Registration Confirmation', $message, 'From: [email protected]'); 

       // Flush the buffered output. 


       // Finish the page: 
       echo '<div class="success">Thank you for 
registering! A confirmation email 
has been sent to '.$Email.' Please click on the Activation Link to Activate your account </div>'; 


      } else { // If it did not run OK. 
       echo '<div class="errormsgbox">You could not be registered due to a system 
error. We apologize for any 
inconvenience.</div>'; 
      } 

     } else { // The email address is not available. 
      echo '<div class="errormsgbox" >That email 
address has already been registered. 
</div>'; 
     } 

    } else {//If the "error" array contains error msg , display them 



echo '<div class="errormsgbox"> <ol>'; 
     foreach ($error as $key => $values) { 

      echo ' <li>'.$values.'</li>'; 



     } 
     echo '</ol></div>'; 

    } 

    mysqli_close($dbc);//Close the DB Connection 

} // End of the main Submit conditional. 



?> 


<head> 
    <meta charset="UTF-8"> 

    <!-- Remove this line if you use the .htaccess --> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 

    <meta name="viewport" content="width=device-width"> 

    <meta name="description" content="test."> 
    <meta name="author" content="test"> 

    <title>test</title> 


    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400italic,400,700' rel='stylesheet' type='text/css'> 
    <link rel="stylesheet" href="css/stilius.css"> 

</head> 
<body> 

<div class="container"> 

<hr> 
<div class="home-page main"> 
    <section class="grid-wrap" > 
     <header class="grid col-full"> 

<div class="right"> 
<form align="center" action="registracija.php" method="post" class="registration_form"> 
    <fieldset> 
    <legend>Registracijos forma </legend> 


    <div class="elements"> 
     <label for="name">Slapyvardis :</label> 
     <input type="text" id="name" name="name" size="25" /> 
    </div> 
    <div class="elements"> 
     <label for="e-mail">El. pa&#353;tas :</label> 
     <input type="text" id="e-mail" name="e-mail" size="25" /> 
    </div> 
    <div class="elements"> 
     <label for="Password">slapta&#382;odis:</label> 
     <input type="password" id="Password" name="Password" size="25" /> 


     <img src="captcha_code_file.php?rand=<?php echo rand(); ?>" 
id="captchaimg" > 
<label for="message">Enter the code above here :</label> 
<input id="6_letters_code" name="6_letters_code" type="text"> 



    </div> 
    <div class="submit"> 
    <input type="hidden" name="formsubmitted" value="TRUE" /> 
     <input type="submit" value="Registruotis!" /> 
    </div> 
    </fieldset> 
</form> 
</div> 

</body> 
</html> 
+0

这是我所有的时间在这里[Google CAPTCHA](https://developers.google.com/recaptcha/docs/php) – ibininja 2013-05-03 12:31:41

回答

2

验证码是使用如下图像library.Process刚创建的任何字符串:显示您的登记表 之前

1-创建随机或字典字串 2-商店它的任何地方[会话你的情况3-比较会话值用户提交值

您的代码:

if (md5($_POST['norobot']) == $_SESSION['randomnr2']) 
{ 
    echo 'You passed captcha test'; 
} 

$ _SESSION [ 'randomnr2']是随机字符串创建并存储在session.before存储它是md5加密。

+0

我把它放在代码中,但现在它说“验证码不匹配! “即使我写了正确的captcha,我正在使用本教程http://www.html-form-guide.com/contact-form/html-contact-form-captcha.html – Simas 2013-05-03 12:14:15

+0

//尝试到 print md5($ _ POST [ 'norobot']); print_r($ _ POST); print_r($ _ SESSION); – Notepad 2013-05-03 12:16:27

+0

谢谢!我不敢相信,但它有效! – Simas 2013-05-03 12:59:23