UserHome.php页面无法从数据库调取显示用户名问题求助
问题排查与修复方案
核心问题排查点
- 逻辑触发条件限制
你当前的用户名查询逻辑包裹在if (isset($_POST['edit_user']))判断内,只有用户提交了带有edit_user字段的POST请求时才会执行查询。用户正常访问UserHome.php时不会触发这个逻辑,导致$name始终为初始的空值。
- 逻辑触发条件限制
- 结果集判断方法错误
原代码中使用count($results)判断结果条数是错误的:mysqli_query()返回的是MySQL结果集对象,count()无法统计它的行数,需要改用mysqli_num_rows()方法做判断。
- 结果集判断方法错误
- 页面依赖缺失
- 如果你没有在
UserHome.php顶部通过require 'server.php';或者include 'server.php';引入server.php文件,UserHome.php中根本不存在$name变量,自然输出为空。 - 如果你使用SESSION存储用户名,必须在**所有用到$_SESSION的页面顶部(输出任何内容之前)**添加
session_start();,否则SESSION无法正常读写。
- 查询逻辑缺少过滤条件
你当前用的查询语句SELECT * FROM edituser会取出表中所有用户数据,即使后续逻辑正常也只会返回第一条用户的名称,无法对应到当前访问的用户,需要补充WHERE条件关联当前登录用户的标识(比如用户ID、邮箱等)。
- 查询逻辑缺少过滤条件
修复后代码示例
server.php 修正版
<?php // 用到SESSION就先在顶部开启 session_start(); $host = "localhost"; $user = "root"; $password = ''; $db_name = "hawkeye_portfolio"; // 新增数据库连接错误检测 $db = mysqli_connect($host, $user, $password, $db_name); if (!$db) { die("数据库连接失败: " . mysqli_connect_error()); } $name = ""; // 取消POST触发限制,可根据实际需求改为登录状态判断触发 // 这里示例过滤id为1的用户,实际替换为当前登录用户的过滤条件即可 $query = "SELECT * FROM edituser WHERE id = 1 LIMIT 1"; $results = mysqli_query($db, $query); if (mysqli_num_rows($results) == 1 ) { $n = mysqli_fetch_array($results); $name = $n['name']; // 存SESSION的话在这里赋值 $_SESSION['name'] = $name; } ?>
UserHome.php 修正版
<?php // 顶部先引入server.php,仅用SESSION输出的话也要加session_start() session_start(); require 'server.php'; ?> <ul class="address-text"> <li><b>Name : </b></li> <li><?php echo $name; ?> </li> <!-- 用SESSION输出的话替换为下面这行即可,?? 是PHP7+的空值运算符,避免变量不存在时报错 --> <!-- <li><?php echo $_SESSION['name'] ?? '未获取到用户名'; ?> </li> --> </ul>
内容的提问来源于stack exchange,提问作者Emon_Rana
相关产品推荐
相关产品推荐

