login.php中if-else条件判断异常,登录结果与预期相反求助
问题分析与修复方案
核心错误
你当前的判断逻辑完全没用到数据库查询结果,而是在对比$_POST['name']和自己赋值的$name(两者是同一个值)、$_POST['password']和$password(也是同一个值),所以这个条件永远为true,不管输入正确与否都会显示登录成功。
修复步骤
- 利用PDO查询结果验证账号密码:执行SQL后,需要检查是否查询到匹配的用户记录。
- 密码安全提示:数据库里绝对不能存储明文密码,应该用
password_hash()生成哈希值存储,验证时用password_verify()对比。
修正后的代码
<?php include('connection.php'); // 获取POST参数并做基本过滤 $name = trim($_POST['name'] ?? ''); $password = $_POST['password'] ?? ''; if(empty($name) || empty($password)){ die('请输入用户名和密码'); } // 准备查询语句,仅查询所需的密码哈希字段 $statement = $connection->prepare('SELECT password_hash FROM registration WHERE name = :name'); $statement->execute([':name' => $name]); // 获取查询到的用户记录 $user = $statement->fetch(PDO::FETCH_ASSOC); // 验证逻辑 if($user && password_verify($password, $user['password_hash'])){ echo '登录成功'; }else { die('用户名或密码错误'); } ?>
补充说明
- 若你之前数据库存的是明文密码,需先批量更新为哈希值:执行
UPDATE registration SET password_hash = password_hash(password)(注意替换实际密码字段名),后续新用户注册时用password_hash($_POST['password'], PASSWORD_DEFAULT)生成哈希存储。 - 使用
fetch()获取单条记录即可,因为用户名通常是唯一的,无需用fetchAll()。 - 添加了参数为空的判断,避免空值触发无效查询。
内容的提问来源于stack exchange,提问作者Butrint Bajrami
相关产品推荐
相关产品推荐

