// 验证各项
$('#resetSubmit').bind('click', function() {
var tel = $('#tel').val();
var vcode = $('#vcode').val();
var password = $('#newpassword').val();
var repassword = $('#renewpassword').val();
if (tel == '') {
alert('请输入手机号');
return false;
} else if (tel.match(/[^0-9]/g)) {
alert('手机号必须是数字');
return false;
} else if (tel.length != 11) {
alert('手机号必须是11位');
return false;
}
if (vcode == '') {
alert('请输入验证码');
return false;
} else {
$.post('user.php?act=check_vcode', { vcode: vcode, tel: tel }, function(data) {
alert(typeof data);return false;
if (data == '-1') {
alert("不存在该验证码,请重新获取");
return false;
} else if (data == '-2') {
alert("该验证码已被使用,请重新获取");
return false;
} else if (data == '0') {
alert("该验证码已过期,请重新获取");
return false;
}
});
}
if (password == '') {
alert('请输入密码');
return false;
} else if (password.length < 6) {
alert('密码长度不能小于6个字符');
return false;
} else if (password != repassword) {
alert('两次密码不一致');
return false;
}
$(this).parent().parent().submit();
});中的这行:$.post('user.php?act=check_vcode', { vcode: vcode, tel: tel }, function(data) {
if (data == '-1') {
alert("不存在该验证码,请重新获取");
return false;
} else if (data == '-2') {
alert("该验证码已被使用,请重新获取");
return false;
} else if (data == '0') {
alert("该验证码已过期,请重新获取");
return false;
}
});
user.php?act=check_vcode:if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {
extract($_POST);
if (!empty($vcode) && !empty($tel)) {
$sql = 'SELECT `vcode`, `used` FROM '.$ecs->table('vcode_tmp').' WHERE `tel` = "'.$tel.'" ORDER BY `id` DESC';
$rs = $db->getRow($sql, true);
if (!$rs || empty($rs['vcode'])) {
echo -1; // 没有该验证码
} else if ($rs['vcode'] != $vcode) {
echo 0; // 不存在该验证码
} else if ($rs['used'] == 1) {
echo -2; // 相同的但已经使用
} else {
$sql = 'UPDATE '.$ecs->table('vcode_tmp').' SET `used` = 1 WHERE `vcode` = "'.$vcode.'"';
$db->query($sql);
echo 1; // ok
}
}
exit;
}
我故意输入一个已过期的验证码也没有提示,直接就提交了,而且$sql = 'UPDATE '.$ecs->table('vcode_tmp').' SET `used` = 1 WHERE `vcode` = "'.$vcode.'"';
$db->query($sql);这句都没有执行
跟一下自己在什么地方给绕过去了
这句没有任何限制,只要点击就触发,所以你上面判断的为空条件无效,请把这句放在else里。
要想实现回调中也可以阻断,可以使用.ajax方法,并且将async参数设置成false,这样ajax请求将变为同步,在ajax执行完成之前将锁定浏览器直至请求执行完成