我使用jquery验证插件时遇到了一些奇怪的问题。这个问题似乎已经被问过几次了,但我找不到我问题的答案。我有一个表单,我想看看电子邮件是否已经输入-如果有,用户不应该能够提交表单。我使用FirePHP输出各种变量。在这里,我注意到查询的返回值总是"1"(这是错误的)。然而,当我手动查询我的数据库(使用PhpMyAdmin),正确的答案("0")出现。
这是我的js:
// validate signup form on keyup and submit
$("#register").validate({
rules: {
......
email: {
required: true,
email: true,
remote: "check_email.php" , async:false
},
},
messages: {
......
email: {required: "Please enter an email address", email: "Please enter a valid email address", remote: "This email is already registered" },
}
}
});
});
这是我的php之后的数据库连接的东西…
$form_email = $_GET['email'];
fb($form_email);
$sql = "SELECT COUNT(*) AS num_rows FROM users WHERE email = " . "'" . $form_email . "'";
fb($sql);
$result = $conn->query($sql);
fb($result->num_rows);
if ($result->num_rows == 0) {
echo 'true';
fb("true");
} else {
echo 'false';
fb("false");
}
计数总是返回为"1",即使我输入了一个不存在的电子邮件。
我也试过返回
echo json_encode('true');
就像我在某处读到的那样,可能会起作用,但它没有帮助。为什么我的响应总是错误的在我的php?
您的remote
规则语法不正确:
rules: {
......
email: {
required: true,
email: true,
remote: "check_email.php" , async:false
},
}
你写它的方式,插件看到async
只是另一个规则。因为没有async
这样的"规则",插件会卡住。
按照文档,试试这个:
rules: {
......
email: {
required: true,
email: true,
remote: "check_email.php"
}
}
或…
rules: {
......
email: {
required: true,
email: true,
remote: {
url: "check_email.php",
async: false
}
}
}
演示:http://jsfiddle.net/KkBSY/