我试图通过验证码输入测试用户的响应。每当用户输入不正确的响应时,此代码都会起作用并吐出错误消息,但是当用户输入正确的响应时,它不会返回成功消息。事实上,回应是空的。我已经玩了几天了,我不知道这里发生了什么。事实上,我已经在我的应用程序的其他部分使用了这个结构,它工作得很好。有什么想法会发生什么?
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] =>
)
答案 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
移到验证区之外,但在没有看到其余代码的情况下,我无法评论这是否是直接问题。