使用数学的验证码

时间:2016-06-12 09:09:46

标签: php

我正在尝试使用数学进行验证码,其中我使用了2个随机变量,将它们相加并与用户输入匹配。但是当我/用户点击提交按钮时,两个变量的值会改变,并且不会与用户输入匹配。我怎么解决这个问题?有什么建议吗?

 <?php      
   $a = rand(1,9);
   $b = rand(1,9);
   $z = $a + $b;
   if(isset($_POST["submit"])){

     $captcha = $_POST['captcha'];
       if ($captcha != $z){
         echo $captcha." and ".$z;
        }
        else {
         echo "true";       
        }

     }
   ?>

<form class="form-horizontal" method="POST" action="">
   <div class="input-group">
     <span><?php echo $a."+".$b."= ?"; ?></span>
     <input type="text" name="captcha">
   </div>
     <button name="submit">submit</button>
</form>

1 个答案:

答案 0 :(得分:2)

如何保持您希望在会话变量中收到的正确结果? 它对最终用户来说是“不可见的”,并允许您使用$_POST中的值轻松交叉检查。

这就是我的想法:

<?php
session_start();

if (!isset($_POST['submit'])) {
    $a = rand(1,9);
    $b = rand(1,9);
    $z = $a + $b;

    $_SESSION['captcha_result'] = $z;
} else {
    $z = $_SESSION['captcha_result'];
    unset($_SESSION['captcha_result']);

    $captcha = $_POST['captcha'];

    if ($captcha != $z) {
        echo $captcha . " and " . $z;
    } else {
        echo "true";
    }
    exit; // Don't display the form in case the user is summiting a captcha challenge
}
?>

<form class="form-horizontal" method="POST" action="">
   <div class="input-group">
     <span><?php echo $a."+".$b."= ?"; ?></span>
     <input type="text" name="captcha">
   </div>
     <button name="submit">submit</button>
</form>

您可以阅读有关使用会话here

的更多信息