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

login.php中if-else条件判断异常,登录结果与预期相反求助

问题分析与修复方案

核心错误

你当前的判断逻辑完全没用到数据库查询结果,而是在对比$_POST['name']和自己赋值的$name(两者是同一个值)、$_POST['password']和$password(也是同一个值),所以这个条件永远为true,不管输入正确与否都会显示登录成功。

修复步骤

  1. 利用PDO查询结果验证账号密码:执行SQL后,需要检查是否查询到匹配的用户记录。
  2. 密码安全提示:数据库里绝对不能存储明文密码,应该用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:05:28