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

PHP登录后无法显示用户名 $_SESSION存储姓名失效问题求解

问题修复方案

你代码里存在4个核心问题,逐一修复即可实现需求:

  • 错误1:查询管理员的SQL语句未查询name字段,导致无法从结果中获取姓名值
  • 错误2:password_verify参数顺序完全颠倒,正确的参数顺序是password_verify(用户输入的明文密码, 数据库存储的哈希密码),你当前的写法会永远返回密码验证失败
  • 错误3:已经通过预处理语句拿到了查询结果,不需要重复调用mysqli_query执行SQL,多余的查询反而取不到正确数据
  • 错误4:登录页没有姓名字段的情况下,开头从$_POST['name']取值的代码完全无效,还会抛出PHP Notice级报错

修复后的server.php代码

<?php
include_once "inc/user-connection.php";
session_start();

// 移除无效的POST参数取值代码
$password = mysqli_real_escape_string($conn, $_POST['password']);
$email = mysqli_real_escape_string($conn, $_POST['email']);

if (isset($_POST['admin-sign-in'])) {
    if (!empty($email) && !empty($password)) {
        // 新增查询name字段
        $sql = 'SELECT email, password, name FROM admin WHERE email = ?';
        if ($stmt = $conn->prepare($sql)) {
            $stmt->bind_param('s', $email);
            $stmt->execute();
            $stmt->store_result();
            if ($stmt->num_rows > 0) {
                // 绑定结果新增name字段
                $stmt->bind_result($email, $db_hashed_password, $name);
                $stmt->fetch();
                // 修正密码验证参数顺序
                if (password_verify($password, $db_hashed_password)) {
                    // 直接存入查询得到的姓名
                    $_SESSION['name'] = $name;
                    header("location: dashboard.php");
                    die();
                } else {
                    header("location: ../html/sign-in-error.html");
                    die();
                }
            } else {
                header("location: ../html/sign-in-error.html");
                die();
            }
            $stmt->close();
        }
    } else {
        header("location: ../html/404-error.html");
        die();
    }
}

优化后的dashboard.php代码

新增未登录判断,避免用户直接访问页面时抛出报错:

<?php
session_start();
$showName = isset($_SESSION['name']) ? $_SESSION['name'] : '访客';
?>
<div class="d-block">
    <h1 class="lead fw-normal text-muted mb-4 px-lg-10">Hello,
        <?php echo $showName; ?>
    </h1>
</div>

内容的提问来源于stack exchange,提问作者kevin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:48:02