如何修改代码实现按登录用户ID展示对应分配职位?
解决方法:仅展示当前登录用户的分配职位
我帮你排查了代码问题,核心原因是你实际用来渲染职位列表的getJobs函数没有做用户ID过滤——你在HTML页面里写的那一段查询逻辑根本没被用到,页面显示的是getJobs返回的所有职位数据。下面是具体修改步骤:
1. 修改getJobs函数,添加用户ID过滤
更新你的主PHP函数,让它接收当前用户的ID作为参数,并在SQL中加入匹配条件:
function getJobs($conn, $userID) { // 情况1:jobs表本身存储了user_ID(你描述的创建职位时已分配) $query = "SELECT * FROM jobs WHERE user_ID = :user_ID"; // 情况2:如果职位是通过driver_jobs关联表分配的(jobs表无user_ID),改用JOIN查询: // $query = "SELECT j.* FROM jobs j JOIN driver_jobs dj ON j.job_id = dj.job_id WHERE dj.user_ID = :user_ID"; $stmt = $conn->prepare($query); // 绑定参数时指定类型为整数,提升安全性 $stmt->bindValue(':user_ID', $userID, PDO::PARAM_INT); $stmt->execute(); $workers = array(); while($worker = $stmt->fetch(PDO::FETCH_OBJ)) { $workers[] = $worker; } return $workers; }
2. 在HTML页面中正确调用函数并传入用户ID
找到你调用getJobs的位置(应该在foreach($workers as $worker)之前),传入当前登录用户的user_ID:
// 确保session已启动,获取当前用户ID if(!isset($_SESSION)) { session_start(); } $currentUserID = $_SESSION['user_ID']; // 调用getJobs时传入用户ID $workers = getJobs($conn, $currentUserID);
3. 清理冗余代码
你HTML页面中那段从$query = "SELECT * FROM jobs WHERE user_ID = :user_ID";开始的查询逻辑是冗余的,完全没被用到,可以直接删除,避免代码混乱。
额外检查
- 确认
$_SESSION['user_ID']存在且值正确:可以通过var_dump($_SESSION['user_ID']);打印出来验证。 - 如果使用关联表
driver_jobs,确保JOIN语句中的外键字段(比如j.job_id和dj.job_id)和你的数据库结构匹配。
修改完成后,页面就只会展示与当前登录用户user_ID匹配的职位了。
内容的提问来源于stack exchange,提问作者James Green
相关产品推荐
相关产品推荐

