验证码响应测试

时间:2012-08-19 17:17:39

标签: php captcha

我试图通过验证码输入测试用户的响应。每当用户输入不正确的响应时,此代码都会起作用并吐出错误消息,但是当用户输入正确的响应时,它不会返回成功消息。事实上,回应是空的。我已经玩了几天了,我不知道这里发生了什么。事实上,我已经在我的应用程序的其他部分使用了这个结构,它工作得很好。有什么想法会发生什么?

if ($recaptcha_response_field !== '') {

    require_once('recaptchalib.php');
    $privatekey = "removed_this_duh...";
    $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], 
            $recaptcha_challenge_field, $recaptcha_response_field);

    if (!$resp->is_valid) {
        $entry_display = 'Sorry, I know this sucks... 
                          but your entry was invalid, please try again.';
    } else {
        $entry_display = 'success';
    }
return $entry_display;

这是客户端ajax业务:

function(data) {

    if (data == 'success') {
        alert('success');
        $('#mask').hide();  
        $('#modal_container').hide();

    } else {
        alert(data);
        $('#captcha_error_area').empty().append(data);
        javascript:Recaptcha.reload();
    }

成功时,这是我正在测试的对象:

Failure:     
ReCaptchaResponse Object ( [is_valid] => [error] => incorrect-captcha-sol )

Success: 
ReCaptchaResponse Object
        (
            [is_valid] => 1
            [error] => 
        )

2 个答案:

答案 0 :(得分:3)

从对象的转储中,当出现错误并且is_valid填充了某些内容时,error可能为NULL或为空。在这种情况下,我会切换您的if的顺序,因为1将评估为true,并且任何内容都不会评估为false

if($resp->is_valid) {
    $entry_display = 'success'; // is_vald is 1

} else {  // is_valid is empty
    $entry_display = 'Sorry, I know this sucks...but your entry was invalid, please try again.';
}

答案 1 :(得分:2)

如果您的代码在失败的情况下达到if (!$resp->is_valid) {...但在成功条件下未进入else块,则唯一的可能是您的代码在成功时未执行。这意味着:

if ($recaptcha_response_field !== '') { 没有被执行。我敢打赌,验证码插件正在做一些你不期望的关于返回值的事情。您可能希望将include移到验证区之外,但在没有看到其余代码的情况下,我无法评论这是否是直接问题。

编辑:这并没有最终成为答案,接受的答案是正确的钱。但是,我的答案可能在类似但不同的情况下有用,所以我将其搁置。