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

