如何解决登录表单的 jQuery 验证 (Ajax)
script.js
$("#login").validate({
rules: {
username: {
required: true,minlength: 4,maxlength: 24,remote: {
url: "../core/login.PHP",type: "post"
}
},password: {
required: true,minlength: 8,type: "post"
}
}
},messages: {
username: {
required: "Username required",remote: "Username invalid"
},password: {
required: "Password required",remote: "Password invalid"
}
}
});
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
require_once 'db.PHP';
if (isset($_POST['username'])) {
$username = $_POST['username'];
$sql = "SELECT * FROM users WHERE username='$username'";
$results = MysqLi_query($conn,$sql);
if (MysqLi_num_rows($results) == 1) {
echo 'true';
} else {
echo 'false';
}
}
if (isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$sql = MysqLi_query($conn,"SELECT password FROM users WHERE username='$username'");
$results = MysqLi_fetch_array($sql);
$hashed_password = $results['password'];
if(password_verify($password,$hashed_password)) {
echo 'true';
} else {
echo 'false';
}
}
} else {
header('HTTP/1.0 403 Forbidden');
}
所以问题来了。本质上,我试图通过 ajax 验证用户名和密码,因为表单在弹出窗口中。如果在数据库中找不到匹配的用户名,将显示“用户名无效”。这部分工作得很好。
现在,当我尝试验证密码时,问题出在哪里。出于某种原因,我不明白为什么它没有得到 $username = $_POST['username'];
。但例如,如果我在密码部分手动定义 $username = 'SomeUser2021';
,它将开始正确验证密码。
此外,如果有人知道如何显示一个简单的错误消息,而不是像“用户名或密码不正确”这样的 2 个单独的错误消息,那就太好了。
任何帮助将不胜感激。
解决方法
只是复制你的代码。如果您想要单个响应“用户名或密码不正确”,您可以使用一个函数来验证这两个值。
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
require_once 'db.php';
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE username='$username' AND password='$username'";
$results = mysqli_query($conn,$sql);
if (mysqli_num_rows($results)) {
echo 'true';
} else {
echo 'false';
}
} else {
echo 'false';
}
} else {
header('HTTP/1.0 403 Forbidden');
}
此外,在表单验证中,您可以对用户名和密码进行一次检查。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。