Php 验证码响应测试
我正在尝试测试用户对验证码输入的响应。每当用户输入错误的响应时,此代码都会工作并发出错误消息,但当用户输入正确的响应时,它不会返回成功消息。事实上,响应是空的。我已经玩了几天了,我不知道这里发生了什么。。事实上,我已经在我的应用程序的其他部分使用了这种结构,并且它工作得很好。你知道会发生什么吗Php 验证码响应测试,php,captcha,Php,Captcha,我正在尝试测试用户对验证码输入的响应。每当用户输入错误的响应时,此代码都会工作并发出错误消息,但当用户输入正确的响应时,它不会返回成功消息。事实上,响应是空的。我已经玩了几天了,我不知道这里发生了什么。。事实上,我已经在我的应用程序的其他部分使用了这种结构,并且它工作得很好。你知道会发生什么吗 if ($recaptcha_response_field !== '') { require_once('recaptchalib.php'); $privatekey = "remo
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] =>
)
如果您的代码达到
如果(!$resp->is_valid){…
对于失败案例,但在成功条件下未继续执行else
块,则唯一的可能性是您的代码在成功后未被执行…这意味着:
if($recaptcha\u响应\u字段!=''){
没有被执行。我敢打赌验证码插件在返回值方面做了一些你不期望的事情。你可能想将你的include
移到验证块之外,但在看不到其余代码的情况下,我无法评论这是否是直接的问题
编辑:这并不是最终的答案,公认的答案是正确的。但是,我的答案在类似但不同的情况下可能有用,所以我将其保留。如果您的代码达到
如果(!$resp->有效){…
对于失败案例,但在成功条件下没有继续执行else
块,唯一的可能性是代码在成功时没有执行…这意味着:
if($recaptcha\u响应\u字段!=''){
没有被执行。我敢打赌验证码插件在返回值方面做了一些你不期望的事情。你可能想将你的include
移到验证块之外,但在看不到其余代码的情况下,我无法评论这是否是直接的问题
编辑:这并不是最终的答案,接受的答案是正确的。但是,我的答案在类似但不同的情况下可能有用,所以我将其保留。从您的对象转储来看,当出现错误时,
是否有效
可能为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.';
}
从对象的转储来看,当出现错误时,
is\u valid
可能为NULL或空,并且error
中填充了一些内容。在这种情况下,我将切换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.';
}
嗯,我将required从if语句中移出,没有任何更改。如上所述,我添加了从recaptchalib.phpregardles返回的对象,
require
的位置为:if($recaptcha\u response\u字段!==“”){
正在解析为false,并且下面的块没有运行。因此,$recaptcha\u response\u field
确实='
,这意味着您的问题来自于设置该变量的任何地方。嗯,我将required移出了if语句,并且没有任何更改。如上所述,我添加了从recaptchalib.ph返回的对象如果require
不在前面,则为:if($recaptcha\u response\u field!=''){
正在解析为false,并且下面的块没有运行。因此,$recaptcha_response_field
执行=''
,这意味着您的问题来自于设置该变量的任何地方。@Thomas运行var_dump($resp->有效)时输出的内容
?为什么返回$entry\u display
?这是在函数的上下文中还是包含的上下文中?我使用ajax提交,因此没有重新加载页面。为了简化问题,我发送了一个字符串,我用JS测试它-如果是一个字符串,我隐藏验证码框,如果是另一个,我显示一条错误消息。你应该使用echo
或打印
,而非返回
返回
仅在函数内工作,或在包含的文件中工作(如果像这样包含它)($return\u value=include('thisHasAReturn.php'))
。尝试用echo
替换您的返回值
。第一个简单的答案是,我会看到您在运行var\u dump($resp->is\u valid)时写入+@Thomas输出的内容
?为什么返回$entry\u display
?这是在函数的上下文中还是包含的上下文中?我使用ajax提交,因此没有重新加载页面。为了简化问题,我发送了一个字符串,我用JS测试它-如果是一个字符串,我隐藏验证码框,如果是另一个,我显示一条错误消息。你应该使用echo
或打印
,而不是返回
返回
只在函数中有效,或者在包含的文件中有效,如果你像这样包含它$return\u value=include('thisHasAReturn.php');
。试着用echo
替换你的返回
。第一个简单的答案我会看到你写出来+