PHP:验证码验证码无法正常工作;

时间:2015-07-07 05:36:25

标签: php captcha

我正在创建一个非常简单的验证码验证过程。

(当用户尝试登录我的网站3次,但没有成功时,他被重定向到Captcha Page(captcha.php),以验证他不是垃圾邮件机器人)

Captcha值本身是从一串字母和数字中随机生成的。总共6位数。

然后,我将此值与用户输入到文本框中的值进行比较。如果值匹配,则用户可以继续。如果没有,则重新加载页面,显示错误消息,并生成新的验证码。

很简单。没有javascript,没有ajax。

除了一件事:如果用户提供正确的值,Captcha不会重定向。

相反,它每次都会给出错误消息。

  <?php session_start();

   include 'database_connect.php';

   function getRandomString($length)  {
   $validCharacters =  
   "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
    $validCharNumber = strlen($validCharacters);
    $result = "";

    for ($i = 0; $i < $length; $i++) {
    $index = mt_rand(0, $validCharNumber - 1);
    $result .= $validCharacters[$index];
    }
    return $result; }

    $captcha_value = getRandomString(6);

    ?>

   <!DOCTYPE html>
   <html>
   <head>
        <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
        <META HTTP-EQUIV="Cache-Control" CONTENT="no-store">
        <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
        <META HTTP-EQUIV="Expires" CONTENT="0">
        <META CHARSET="UTF-8">      
        <title>Captcha Test</title>         
  </head>
 <body>
    <fieldset><legend>CAPTCHA :</legend>

     <?php 
            if (isset($_POST['submit'])) {

                $post_captcha = $_POST['captcha'];

                if ($post_captcha == $captcha_value) {

                $clear_failed_logins =  mysqli_query($conn,("Delete FROM 
                                        login_attempts where login = 
                                        '$_POST[login]'")) 
                                        or die(mysqli_error($conn)); 

                header ("Location: /example.com/login.php");    
                exit();     
            }
            else {

            echo "<p style='color:red; font-weight:bold;'>The value you  
                   entered is not correct! Please try again.</p>";
             }
          }
        ?> 

        <p>Please input the characters you see into the text-box below :</p>
        <p>  <?= $captcha_value ?> </p>
        <form method="POST" action="captcha.php">
        <input type="text" name="captcha" id="captcha" size=10 
                     autocomplete="off" required><br><br><br> 
        <input type="submit" name="submit" id="submit" value="SUBMIT"> 
        </form>
    </fieldset> 

1 个答案:

答案 0 :(得分:1)

在向用户输出内容后,您无法使用php中的标题重定向,因此如果在输出内容之前将其移动到if页面的顶部。 如果您想在此位置重定向,请尝试元刷新

 <meta http-equiv="refresh" content="0; URL=http://www.domain.com">

此外,您应该将验证码值存储在表单中,因为每次页面刷新时都会重新生成(因此在表单提交后),我建议您使用reCaptcha进行尝试,这很容易实现,更安全