我遇到jQuery远程验证问题。我正在检查电子邮件是否已注册,远程验证是否有效,但它只显示值 - true或false,我无法提交表单。
jQuery代码:
$("#form").validate({
rules: {
email: {
required: true,
email: true,
remote: "check-email.php"
}
}
});
check-mail.php代码:
$email = trim(strtolower($_REQUEST['email']));
$checkemail = mysql_query("SELECT * FROM users WHERE email = '".$email."'");
if(mysql_num_rows($checkemail) == 1)
{
$valid = 'false';
}
else
{
$valid = 'true';
} //end of $checkemail if statemant
echo json_encode($valid);
答案 0 :(得分:13)
$checkemail = mysql_query("SELECT * FROM users WHERE email = '".$email."'");
从来没有永远 永远这样做。这是asking for trouble:SQL注入,随机错误(单引号在电子邮件地址中有效,BTW)。
有parameterized queries,使用它们。它只是代码的几行,但它是一个像谷仓门一样宽的安全漏洞和安全的数据库交互之间的区别。
if(mysql_num_rows($checkemail) == 1)
{
$valid = 'false';
}
else
{
$valid = 'true';
}
是非常详细的说法
$valid = mysql_num_rows($checkemail) == 1;
根据文档,远程验证的响应是JSON编码的布尔,而不是JSON编码的字符串。
您有"true"
或"false"
,这将是"\"true\""
或"\"false\""
到json_encode()
,这是错误的。实际true
或false
将变为"true"
或"false"
,这是正确的。
将响应内容类型设置为JSON也可能是一个好主意:
header('Content-type: application/json');
答案 1 :(得分:1)
当需要布尔值时,它可能只是返回字符串。也许尝试以下方法:
if(mysql_num_rows($checkemail) == 1)
{
$valid = false;
}
else
{
$valid = true;
}
答案 2 :(得分:1)
对于那些无法使用上述技术进行远程验证工作的人,以下是我的两分钱,可以帮助确保您走上正轨。
1)。它仅适用于v1.6.1及更高版本。坚持使用最新版本的jQuery http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
2)。选择“同步”远程执行,默认为异步。将async设置为false。
$("#form").validate({
rules: {
email: {
required: true,
email: true,
remote: { url:"check-email.php", async:false }
}
}
});