Javascript jQuery Real Person-总是失败
无论我输入什么(即使是正确的验证码),我总是得到不匹配的输出。我已经尝试回显这些值(如果键入正确的代码,它们应该匹配)。我总是得到这样的东西: 6952304285049Javascript jQuery Real Person-总是失败,javascript,php,jquery,validation,captcha,Javascript,Php,Jquery,Validation,Captcha,无论我输入什么(即使是正确的验证码),我总是得到不匹配的输出。我已经尝试回显这些值(如果键入正确的代码,它们应该匹配)。我总是得到这样的东西: 6952304285049 -1247767175 我正在使用jquery-1.10.2.min.js(并将其与realperson.js文件一起链接到我的标题中) 这是我的代码(我也在做其他验证): $(函数(){ $('#defaultReal').realperson(); }); 注册 您已正确输入“真人”值,并且表单已被处理 您没有正确
-1247767175
- 我正在使用jquery-1.10.2.min.js(并将其与realperson.js文件一起链接到我的标题中)
$(函数(){
$('#defaultReal').realperson();
});
注册
您已正确输入“真人”值,并且表单已被处理
您没有正确输入验证码值,表单已被拒绝
电邮:
密码:
验证码:
注册
提供了两个版本的php rpHash函数,一个用于32位php,另一个用于64位php。运行phpinfo并确保使用本页提供的正确版本的函数。此处使用的按位函数将在32位和64位机器上返回不同的值。参见本页:克雷格·雅各布斯说得好,这和你指出的问题是一样的。我也面临同样的问题,并通过如下所示的更改来解决:
function rpHash($value) {
$hash = 5381;
$value = strtoupper($value);
for($i = 0; $i < strlen($value); $i++) {
$hash = (leftShift32($hash, 5) + $hash) + ord(substr($value, $i));
}
return $hash; }
function leftShift32($number, $steps) {
$binary = decbin($number);
$binary = str_pad($binary, 32, "0", STR_PAD_LEFT);
$binary = $binary.str_repeat("0", $steps);
$binary = substr($binary, strlen($binary) - 32);
return ($binary{0} == "0" ? bindec($binary) :
-(pow(2, 31) - bindec(substr($binary, 1))));
}
if (isset($_POST['submit'])) {
.....
if (rpHash($_POST['defaultReal']) != $_POST['defaultRealHash']) {
echo "Invalid contact request, please try again with correct verification code...";
exit;
}
.....
.....
}
函数($value){
$hash=5381;
$value=strtoupper($value);
对于($i=0;$i
希望它也能帮助其他人。
mysql\uuz
已被弃用。最好使用mysqli或PDO。此外,您还容易受到琐碎的SQL注入攻击。祈祷某人的用户名不是”;删除数据库--
。使用预先准备好的语句(mysql不支持)可以解决这个问题。此外,通过获取所有条目并循环它们来检测数据库中是否存在条目有点愚蠢(缓慢)(并且容易受到竞争条件的影响)。最好让数据库通过唯一的约束(预检查很好,但不够)来完成这项工作。您从哪里获得需要重新键入的用户的验证码值?好吧,这必须先存储到会话中进行验证-这就是大多数captcha LIB的工作方式?我确信我这样做的方式很愚蠢/缓慢,因为这是为了PHP类中的家庭作业,所以我仍在学习如何做这件事。从我为realperson.js下载的.html文件中的工作示例可以看出,没有涉及会话。它不会通过这个抓取此人的验证码条目吗$_POST['defaultRealHash']我可能实际上拥有defaultReal,并且defaultRealHash是向后的。让我切换一下,让你知道这是否解决了它…啊!rpHash函数(php)使用>>按位运算符,在32位和64位机器上的响应明显不同。因此,请使用网站上64位php下提供的其他php函数。我还没有彻底研究过这个问题,但它在我的演示服务器(Mac)和生产服务器(CentOS)PHP5.4.Xx8664上运行良好
function rpHash($value) {
$hash = 5381;
$value = strtoupper($value);
for($i = 0; $i < strlen($value); $i++) {
$hash = (leftShift32($hash, 5) + $hash) + ord(substr($value, $i));
}
return $hash; }
function leftShift32($number, $steps) {
$binary = decbin($number);
$binary = str_pad($binary, 32, "0", STR_PAD_LEFT);
$binary = $binary.str_repeat("0", $steps);
$binary = substr($binary, strlen($binary) - 32);
return ($binary{0} == "0" ? bindec($binary) :
-(pow(2, 31) - bindec(substr($binary, 1))));
}
if (isset($_POST['submit'])) {
.....
if (rpHash($_POST['defaultReal']) != $_POST['defaultRealHash']) {
echo "Invalid contact request, please try again with correct verification code...";
exit;
}
.....
.....
}