0

我将在我的表单中有一个验证码,如果验证码输入正确,则提交。我正在使用 jQuery AJAX 发送输入的代码以进行匹配检查。但是无论输入的验证码是否正确,我在 jQuery 中得到的结果都是一样的。

如何解决此问题并在 CAPTCHA 检查中获得正确结果?

这是我的代码,包括 PHP 和 jQuery:

PHP(生成图像.php):

header('Content-type:image/jpeg');
$text = rand(100000, 999999);

...

if (isset($_POST['check_capcha'])) {
  $check =$_POST['check_capcha'];
  if ($check == $text) {
    echo true;
  }
}

jQuery:

var check_capcha = $("#human_check_sub").val();
check_capcha = parseInt(check_capcha);
$.post("../php/generateimage.php", {check_capcha:check_capcha}, function(data) {
  if (data) {
    //$.post("../php/core.php");
    alert("ok sub");
  } else {
    $("#img_cap_sub").attr("src", "../php/generateimage.php");
    $("#caution_sub").html('<span>Capcha entered incorrect.try again</span>');
  }
});
4

2 回答 2

0

您可能必须在 $.post 调用中将第一个 check_captcha 放在引号中:

 $.post("../php/generateimage.php",{"check_capcha":check_capcha},function(data){

如果您考虑一下,JS 将使用 check_captcha 的值作为键和值,因此您的 php 页面可能无法识别它。

编辑:抱歉没有看到上面 Marc B 的评论,我必须同意他的观点,你应该生成一个值,将它保存在跨请求(会话)的持久位置,然后引用该数字,否则将生成两个随机数并且应该'不匹配(如果他们匹配那将是非常糟糕的)

于 2012-07-25T14:27:02.780 回答
0

看起来您为每个 ajax 请求生成了一个新的验证码,包括在验证尝试时。当您进行验证检查而不是生成新图像时,请跳过 rand 调用。生成它时,将正确的值存储在会话变量中,或者在您传递check_capcha带有尝试答案的参数时要检查的东西。

目前,您的 if 语句几乎肯定会返回 false

就像是

    session_start();

    if(!isset($_REQUEST['check_capcha']))
    {
        $_SESSION['correct'] = rand(100000, 999999);
        ...
        ...
        ...
    }
    else
    {
        if($check == $_SESSION['correct'])
        {
            echo true ;
        }
    }
于 2012-07-25T14:32:02.373 回答