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

UserHome.php页面无法从数据库调取显示用户名问题求助

问题排查与修复方案

核心问题排查点

    1. 逻辑触发条件限制
      你当前的用户名查询逻辑包裹在if (isset($_POST['edit_user']))判断内,只有用户提交了带有edit_user字段的POST请求时才会执行查询。用户正常访问UserHome.php时不会触发这个逻辑,导致$name始终为初始的空值。
    1. 结果集判断方法错误
      原代码中使用count($results)判断结果条数是错误的:mysqli_query()返回的是MySQL结果集对象,count()无法统计它的行数,需要改用mysqli_num_rows()方法做判断。
    1. 页面依赖缺失
    • 如果你没有在UserHome.php顶部通过require 'server.php';或者include 'server.php';引入server.php文件,UserHome.php中根本不存在$name变量,自然输出为空。
    • 如果你使用SESSION存储用户名,必须在**所有用到$_SESSION的页面顶部(输出任何内容之前)**添加session_start();,否则SESSION无法正常读写。
    1. 查询逻辑缺少过滤条件
      你当前用的查询语句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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:09:02