You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:31:24