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
相关产品推荐
相关产品推荐

