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

PHP无法从数据库获取变量至用户仪表盘问题排查求助

问题排查与修复方案

1. 脚本提前终止(核心问题)

你的dashboard.php里有两行调试代码直接终止了程序执行:

var_dump($result);
die;

这两行代码会在执行到此处时直接输出查询结果并停止脚本,导致后续读取用户数据、存入SESSION以及加载仪表盘页面的代码完全无法运行。必须删除这两行,才能让后续逻辑正常执行。

2. SQL注入风险(安全隐患)

当前SQL查询用字符串拼接方式直接代入SESSION中的用户名,存在严重SQL注入漏洞:

$sql = "SELECT * FROM users WHERE username='$username'";

改成预处理语句规避风险:

$sql = "SELECT email, registration_date FROM users WHERE username=?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "s", $username);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

3. HTML文件的PHP解析问题

你的dashboard.html文件包含PHP代码,但默认情况下服务器不会解析.html文件中的PHP代码,会直接把<?php echo ... ?>作为文本输出。解决方法二选一:

  • 把dashboard.html重命名为dashboard.inc.php,并修改dashboard.php中的引入路径:
    include "dashboard.inc.php";
    
  • 修改服务器配置(如Apache的.htaccess)让其解析.html中的PHP,但这种方法不推荐,易引发其他问题。

修复后的完整代码示例

dashboard.php

<?php
session_start();
if (!isset($_SESSION["username"])) {
  header("Location: index.php");
  exit();
}

// 数据库连接配置
$host = "localhost";
$user = "root";
$password = "";
$database = "login_system";

$conn = mysqli_connect($host, $user, $password, $database);

if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

// 安全获取用户信息
$username = $_SESSION["username"];
$sql = "SELECT email, registration_date FROM users WHERE username=?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "s", $username);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

if (mysqli_num_rows($result) == 1) {
  $row = mysqli_fetch_assoc($result);
  $_SESSION["email"] = $row["email"];
  $_SESSION["registration_date"] = $row["registration_date"];
}

mysqli_close($conn);

// 加载仪表盘模板
include "dashboard.inc.php";
?>

dashboard.inc.php(原dashboard.html)

<!DOCTYPE html>
<html>
<head>
  <title>User Dashboard</title>
  <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
  <header>
    <h1>Welcome, <?php echo htmlspecialchars($_SESSION["username"]); ?></h1>
    <a href="logout.php">Log Out</a>
  </header>
  <main>
    <h2>Your Account</h2>
    <table>
      <tr>
        <td><strong>Username:</strong></td>
        <td><?php echo htmlspecialchars($_SESSION["username"]); ?></td>
      </tr>
      <tr>
        <td><strong>Email:</strong></td>
        <td><?php echo htmlspecialchars($_SESSION["email"] ?? "未获取到邮箱信息"); ?></td>
      </tr>
      <tr>
        <td><strong>Registration Date:</strong></td>
        <td><?php echo htmlspecialchars($_SESSION["registration_date"] ?? "未获取到注册日期"); ?></td>
      </tr>
    </table>
  </main>
</body>
</html>

注:添加htmlspecialchars()防止XSS攻击,用??运算符处理变量不存在的情况,避免页面报错。

内容的提问来源于stack exchange,提问作者Matías Huartamendía

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:07:18