如何用PHP从数据库获取并显示登录用户数据?求助
问题分析与修复方案
你的代码存在多个关键问题,导致无法正确显示登录用户的数据,以下是问题点和修正后的代码:
核心问题点
- 未初始化Session:使用
$_SESSION前必须调用session_start(),否则无法读取登录用户的邮箱信息 - 未定义
$email变量:应该从$_SESSION['email']中获取当前登录用户的邮箱 mysqli_query参数缺失:必须传入数据库连接对象(来自db.inc.php)才能执行查询- 错误的触发条件:
isset($_POST['index.php'])逻辑不成立,页面加载时就应该执行用户数据查询 - 变量名不匹配:PHP代码中定义的是
$fetch,HTML输出时错误写成$_fetch - 存在SQL注入风险:直接将变量拼接进SQL语句,容易遭受攻击
修正后的PHP代码
<?php session_start(); // 必须在脚本最顶部调用,开启Session require('db.inc.php'); // 检查用户是否登录,未登录则跳转至首页 if(!isset($_SESSION['email'])){ header('Location: home.php'); exit; // 跳转后终止脚本,避免后续代码执行 } // 从Session获取当前登录用户的邮箱 $email = $_SESSION['email']; // 使用预处理语句执行查询,避免SQL注入(假设db.inc.php中的连接变量为$conn) $stmt = mysqli_prepare($conn, "SELECT * FROM tbl_account WHERE email = ?"); mysqli_stmt_bind_param($stmt, "s", $email); mysqli_stmt_execute($stmt); $data = mysqli_stmt_get_result($stmt); $fetch = []; if(mysqli_num_rows($data) > 0){ $fetch = mysqli_fetch_assoc($data); } ?>
修正后的显示表单代码
<h1 class="text-primary">Your Information</h1> <br> <h5>First Name</h5> <h3><?php echo isset($fetch['firstName']) ? $fetch['firstName'] : '未找到数据'; ?></h3><br> <h5>Last Name</h5> <h3><?php echo isset($fetch['lastName']) ? $fetch['lastName'] : '未找到数据'; ?></h3><br> <h5>Sex</h5> <h3><?php echo isset($fetch['sex']) ? $fetch['sex'] : '未找到数据'; ?></h3><br> <h5>Email Address</h5> <h3><?php echo isset($fetch['email']) ? $fetch['email'] : '未找到数据'; ?></h3><br> </div>
额外说明
- 确保
db.inc.php中正确初始化了数据库连接变量(如示例中的$conn),若变量名不同需对应修改 - 添加
isset()判断可避免数据不存在时出现「Undefined index」错误 - 预处理语句是防范SQL注入的标准做法,禁止直接将用户输入拼接进SQL语句
内容的提问来源于stack exchange,提问作者Carl Ret02
相关产品推荐
相关产品推荐

