1

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

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] => 
        )
4

2 回答 2

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.';
}
于 2012-08-19T17:58:00.757 回答
2

如果您的代码正在if (!$resp->is_valid) {...处理失败案例,但else在成功条件下没有继续执行该块,则唯一的可能性是您的代码没有在成功时执行......这意味着:

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

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

于 2012-08-19T17:38:15.977 回答