SQL/PHP实现用户个人主页显示专属用户信息的方法
解决PHP页面始终显示首个用户信息的问题
看起来你遇到的问题很典型——查询用户专属信息时没有根据当前登录用户的唯一标识(user_id)做过滤,导致每次都拉取了数据库里的第一条记录。咱们一步步排查和解决:
1. 确认登录后Session是否正确存储了当前用户的user_id
首先要确保用户登录成功后,你已经把该用户的user_id存入了Session。登录逻辑里应该有类似这样的代码:
// 假设登录验证通过后,从数据库拿到当前用户的信息 $user = mysql_fetch_assoc($result); // 将user_id存入Session $_SESSION['user_id'] = $user['user_id'];
你可以在显示用户信息的页面开头加一行调试代码,确认Session里的user_id是否正确:
var_dump($_SESSION); // 查看输出里是否有对应登录用户的user_id值
如果Session里的user_id始终是管理员的ID,那问题出在登录逻辑——你可能不管哪个用户登录,都错误地把管理员的ID存入Session了。
2. 检查用户信息查询的SQL语句
这是最常见的问题:你的查询语句没有添加WHERE user_id = 当前用户ID的过滤条件,导致直接取了数据库的第一条记录。
错误示例(会拉取第一条用户):
$sql = "SELECT first_name, last_name FROM users"; $result = mysql_query($sql); $user = mysql_fetch_assoc($result); // 这里拿到的是数据库里的第一个用户
正确写法(根据Session里的user_id过滤):
// 先确保Session里存在有效user_id if(isset($_SESSION['user_id'])){ $user_id = $_SESSION['user_id']; // 注意:mysql扩展已废弃,建议后续换成mysqli/PDO,这里先适配你的现有代码 $sql = "SELECT first_name, last_name FROM users WHERE user_id = $user_id"; $result = mysql_query($sql); $user = mysql_fetch_assoc($result); } else { // 未登录的处理逻辑,比如跳转到登录页 header("Location: login.php"); exit; }
3. 额外注意事项
- SQL注入风险:上面的写法直接把
$_SESSION['user_id']拼进SQL里,虽然Session里的值一般是你自己存入的,但还是建议使用预处理语句(比如mysqli的prepare)来避免潜在风险。 - Session启动时机:确保
session_start()在页面的最开头调用,不能有任何HTML输出、空格甚至空行在它之前,否则Session可能无法正常工作。 - mysql扩展废弃:你用的
mysql_con...属于已废弃的mysql扩展,PHP 7及以上版本已经移除了这个扩展,建议尽快迁移到mysqli或PDO,避免后续兼容性问题。
内容的提问来源于stack exchange,提问作者I Need Help
相关产品推荐
相关产品推荐

