对于我的生活,我无法理解为什么这不起作用。我有以下代码
script.js
$("#login").validate({
rules: {
username: {
required: true,
minlength: 4,
maxlength: 24,
remote: {
url: "../core/login.php",
type: "post"
}
},
password: {
required: true,
minlength: 8,
remote: {
url: "../core/login.php",
type: "post"
}
}
},
messages: {
username: {
required: "Username Required",
remote: "Username invalid"
},
password: {
required: "Password Required",
remote: "Password invalid"
}
}
});
登录.php
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 个单独的错误消息,那就太好了。
任何帮助将不胜感激。
答案 0 :(得分:-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');
}
此外,在表单验证中,您可以对用户名和密码进行一次检查。