php - 登录表单的 jQuery 验证 (Ajax)
问题描述
对于我的生活,我无法理解为什么这不起作用。我有以下代码
脚本.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 个单独的错误消息,例如“用户名或密码不正确”,那就太好了。
任何帮助,将不胜感激。
解决方案
只是复制你的代码。如果您想要一个响应“用户名或密码不正确”,您可以使用一个函数来验证这两个值。
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');
}
同样在您的表单验证中,您可以对用户名和密码进行一次检查。
推荐阅读
- sql-server - 如果数据库完全加密,查询如何工作?
- karate - 如何根据条件验证数组中字段中的子字符串
- c# - 使用 |DataDirectory| 时 C# 本地数据库不更新
- c# - 悬停事件错误触发
- linux - 当我记录 Shell 输出时脚本出现错误
- python - gsheets使用batchupdate插入python字典
- python - 将 RPi.GPIO 导入 python 脚本时出错
- javascript - 重复时,正则表达式规则段未按预期工作
- jquery - Laravel / AJAX - 搜索框和搜索姓氏并在 Texbox 上显示
- github - 在 Github markdown 中使用表情符号