【发布时间】:2016-09-21 07:48:25
【问题描述】:
我正在处理一个登录表单,用户在其中输入他的电子邮件,该电子邮件通过 AJAX 进行验证,然后密码也通过 AJAX 进行验证。 这是代码, JS代码-
//AJAX for email input field
function emailCheck(email) {
return $.ajax({
type: "POST",
url: "ajax_index.php",
data: "email=" + email
});
}
//AJAX for password input field
function passwordCheck(password, email) {
return $.ajax({
type: "POST",
url: "ajax_index.php",
data: {password: password, email: email}
});
}
PHP 代码 -
//receives POST request from email field
if (isset($_POST['email'])) {
$email = mysqli_real_escape_string($dbconn, $_POST['email']);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo -1;
} else {
$query = "SELECT * from users WHERE email = '$email'";
$query_result = mysqli_query($dbconn, $query) or die(mysqli_error($dbconn));
$result_rows = mysqli_num_rows($query_result);
echo $result_rows;
}
}
//receives POST from password field
if (isset($_POST['password'], $_POST['email'])) {
$email = mysqli_real_escape_string($dbconn, $_POST['email']);
$password = mysqli_real_escape_string($dbconn, $_POST['password']);
$query = "SELECT email, password from users WHERE email = '$email'";
$query_result = mysqli_query($dbconn, $query) or die(mysqli_error($dbconn));
$result_rows = mysqli_num_rows($query_result);
$row = mysqli_fetch_assoc($query_result);
if (password_verify($password, $row['password'])) {
echo 1;
}
else {
echo 0;
}
}
如您所见,对于密码字段,我必须同时获取$_POST['password'] 和$_POST['email'],以便我可以根据该电子邮件验证密码。但这会调用两个处理程序,一个仅用于电子邮件字段,一个用于电子邮件和密码,我只想运行一个。那么,我该如何解决这个问题呢?
谢谢。
【问题讨论】:
-
我们需要查看调用
emailCheck和passwordCheck函数的附加处理程序。 -
检查邮箱是否存在继续输入密码否则返回邮箱m=不存在
-
最好有一个额外的变量,如
action=emailCheck和action=passwordCheck以避免混淆。