HTML表单提交正确账号密码,数据库仍返回用户未找到(0)的问题求助
解决登录验证无法匹配用户的问题
看起来你遇到了登录验证的常见问题——明明输入了正确的账号密码,代码却返回0,找不到匹配的用户。我帮你梳理几个最可能的原因和对应的解决办法:
1. 密码存储与验证方式不匹配(最常见)
如果你的数据库里密码是加密存储的(比如用了PHP的password_hash()函数),那直接用password='$password'这种明文对比是完全匹配不到的。
举个例子:如果当初你往数据库存密码时用的是:
INSERT INTO users (login, password) VALUES ('user1', password_hash('mypassword', PASSWORD_DEFAULT));
那验证时必须用password_verify()函数来对比,而不是直接拼SQL。修改后的PHP代码应该是这样:
<?php $login = trim($_POST['login']); $password = trim($_POST['password']); require "config/con1.php"; // 使用预处理语句防止SQL注入,同时正确验证加密密码 $sql = "SELECT password FROM users WHERE login = ?"; $stmt = mysqli_prepare($con, $sql); mysqli_stmt_bind_param($stmt, "s", $login); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $user = mysqli_fetch_assoc($result); if ($user && password_verify($password, $user['password'])) { echo 1; } else { echo 0; } ?>
2. 输入内容存在多余空格或大小写不匹配
- 检查输入的账号/密码有没有不小心加了前后空格:可以用
trim()函数过滤掉输入内容的首尾空格(上面的代码已经加了)。 - 检查数据库字段的排序规则:如果
login或password字段用的是utf8_bin这类区分大小写的规则,那输入的大小写必须和数据库里的完全一致。如果想让账号不区分大小写,可以把字段排序规则改成utf8mb4_general_ci。
3. 先确认参数是否正确接收
你的代码里已经加了echo $login.$password;,点击登录后看看页面上输出的内容是不是和你输入的完全一致。如果输出不对,那可能是前端传参的问题(不过看你的JS代码,传参名login和password是对的,应该没问题)。
4. 直接在phpMyAdmin里测试SQL
打开你的users表,手动执行一条测试SQL:
SELECT id FROM users WHERE login='你的测试账号' AND password='你的测试密码';
如果这条SQL能返回结果,那就是代码的问题;如果返回空,那说明数据库里的记录和你输入的确实不匹配(比如密码存错了,或者账号拼写错误)。
额外提醒:防止SQL注入
你现在的代码直接把POST参数拼到SQL语句里,非常容易被SQL注入攻击。上面给的代码用了预处理语句,可以有效避免这个问题,建议以后都用这种方式写数据库查询。
内容的提问来源于stack exchange,提问作者unknown programmer
相关产品推荐
相关产品推荐

