PHP网站基础登录后如何展示当前登录用户的专属姓名、技能与描述
解决方法:展示当前登录用户的个人资料
嘿,我来帮你搞定这个问题!你现在的代码会取出所有用户的profile数据,这显然不是你想要的——咱们只需要当前登录用户的资料对吧?下面一步步来调整:
核心问题分析
你当前的SQL语句 SELECT * FROM profile 会查询表中所有用户的信息,而我们需要通过登录时存在Session里的用户标识(比如用户ID)来筛选出当前登录者的资料。
具体步骤与代码示例
1. 确认Session中的用户ID
首先你的 session.php 应该已经在用户登录时把用户的唯一ID存入了Session,比如 $_SESSION['user_id']。如果还没存,记得在登录验证通过后加上类似这样的代码:
// 登录验证通过后,假设从users表取出了用户ID $_SESSION['user_id'] = $user_row['id'];
2. 安全查询当前用户的资料
使用预处理语句查询(避免SQL注入风险),替换你原来的SQL部分:
<?php include('session.php'); require 'config.php'; // 先检查用户是否已登录,未登录则跳转登录页 if (!isset($_SESSION['user_id'])) { header("Location: login.php"); exit; } // 准备预处理语句,只查询当前用户的所需字段 $stmt = $conn->prepare("SELECT firstname, lastname, skills, description FROM profile WHERE user_id = ?"); // 绑定参数:"i"表示参数是整数类型(如果你的user_id是字符串就用"s") $stmt->bind_param("i", $_SESSION['user_id']); $stmt->execute(); // 获取查询结果 $result = $stmt->get_result(); $current_user = $result->fetch_assoc(); // 关闭资源 $stmt->close(); $conn->close(); ?>
3. 灵活展示用户资料(不用局限于表格)
你可以用任意HTML结构来展示,比如用卡片式布局:
<!-- 前端展示区域,可根据你的页面样式自定义 --> <div class="user-profile-card"> <h3>我的个人资料</h3> <div class="profile-item"> <span class="label">姓名:</span> <span class="value"><?php echo htmlspecialchars($current_user['firstname']) . ' ' . htmlspecialchars($current_user['lastname']); ?></span> </div> <div class="profile-item"> <span class="label">技能:</span> <span class="value"><?php echo htmlspecialchars($current_user['skills']); ?></span> </div> <div class="profile-item"> <span class="label">个人描述:</span> <span class="value"><?php echo htmlspecialchars($current_user['description']); ?></span> </div> </div>
关键注意事项
- 安全防护:用
htmlspecialchars()转义输出内容,防止XSS攻击;用预处理语句避免SQL注入。 - 数据库结构适配:如果你的
profile表中关联用户的字段不是user_id(比如是id),记得修改WHERE条件里的字段名。 - 登录状态校验:一定要先检查Session中的用户ID是否存在,防止未登录用户直接访问资料页面。
内容的提问来源于stack exchange,提问作者James Wood
相关产品推荐
相关产品推荐

