PHP登录后无法展示用户姓名 仅获取到邮箱密码该如何解决
功能修复方案
存在的问题
- 登录查询SQL未包含
name字段,无法从数据库获取姓名数据 password_verify参数顺序错误,且重复对用户输入密码做哈希运算的逻辑错误- 密码校验通过后重复执行SQL查询的逻辑冗余,没有实际作用
- 代码开头接收不存在的POST参数(姓名、用户名),会触发PHP警告
修正代码
1. server.php调整
<?php // session_start 放在代码最顶部,避免 headers already sent 错误 session_start(); include_once "inc/user-connection.php"; // 仅接收登录页存在的字段:邮箱、密码 $email = mysqli_real_escape_string($conn, $_POST['email']); $input_password = $_POST['password']; // 明文密码不要转义,留着给password_verify校验 if (isset($_POST['admin-sign-in'])) { if (!empty($email) && !empty($input_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) { // 绑定结果新增数据库存储的密码、姓名 $stmt->bind_result($email, $db_hashed_password, $name); $stmt->fetch(); // 密码校验:第一个参数是用户输入的明文密码,第二个是数据库存储的哈希密码 if (password_verify($input_password, $db_hashed_password)) { // 直接把绑定拿到的name存入session $_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(); } }
2. dashboard.php可选优化(避免未登录时报错)
<?php session_start(); // 增加判空兜底,避免session不存在时抛出警告 $show_name = $_SESSION['name'] ?? '管理员'; ?> <div class="d-block"> <h1 class="lead fw-normal text-muted mb-4 px-lg-10">您好,<?php echo $show_name; ?></h1> </div>
调整后即可正常从数据库读取姓名存入session,控制台页面就能展示对应姓名。
内容的提问来源于stack exchange,提问作者kevin
相关产品推荐
相关产品推荐

