如何在双列表中实现已关联用户的自动勾选
发布时间 - 2026-01-31 00:00:00 点击率:次本文介绍如何通过 php 一次性查询并比对两个数据库表(用户表与任务责任人表),在右侧可选用户列表中自动勾选左侧已分配的用户,提升任务管理界面的交互一致性与开发效率。
要实现右侧用户复选框()根据左侧已分配用户状态自动勾选,核心思路是:先收集所有已关联的用户 ID,再在渲染右侧列表时动态判断并添加 checked 属性。
✅ 步骤一:收集已分配用户 ID 到数组
在第一个查询(左侧已分配用户)的循环中,不直接输出 HTML,而是将 userid 存入一个索引数组:
$user_ids = []; // 初始化空数组
$getcurrentusers = $conn->prepare(
"SELECT u.userid, u.username, u.Fname, u.inactive, r.userid, r.job_id
FROM users AS u
INNER JOIN job_responsible AS r ON u.userid = r.userid
WHERE u.inactive = 0 AND r.job_id = ?
ORDER BY u.Fname"
);
$getcurrentusers->bind_param("i", $getPo
stID); // ✅ 使用参数化防止 SQL 注入
$getcurrentusers->execute();
$resultgetcurrentusers = $getcurrentusers->get_result();
$getcurrentusers->close();
if ($resultgetcurrentusers->num_rows > 0) {
while ($row = $resultgetcurrentusers->fetch_assoc()) {
$user_ids[] = (int)$row["userid"]; // 强制转为整型,确保类型安全
echo htmlspecialchars($row["username"]) . " (" . htmlspecialchars($row["Fname"]) . ")
";
}
} else {
echo "Der er ikke valgt nogle ansvarlige til denne opgave.";
}⚠️ 注意:已将原始 SQL 中的 $getPostID 改为使用 ? 占位符 + bind_param(),彻底规避 SQL 注入风险;同时对输出内容使用 htmlspecialchars() 防止 XSS。
✅ 步骤二:右侧列表渲染时动态添加 checked
在第二个查询(右侧可选用户)循环中,检查当前用户的 userid 是否存在于 $user_ids 数组中,并据此决定是否添加 checked 属性:
$getdepartmentview = $SetDepartmentView;
$explodegetdepartmentview = explode(",", $getdepartmentview);
$implodegetdepartmentview = "'" . implode("','", array_map('trim', $explodegetdepartmentview)) . "'"; // ✅ 增加 trim() 防空格干扰
$getusers = $conn->prepare(
"SELECT userid, username, Fname, inactive
FROM users
WHERE departmentid IN ($implodegetdepartmentview) AND inactive = 0
ORDER BY Fname"
);
$getusers->execute();
$resultgetusers = $getusers->get_result();
$getusers->close();
if ($resultgetusers->num_rows > 0) {
while ($row = $resultgetusers->fetch_assoc()) {
$userid = (int)$row["userid"];
$checked = in_array($userid, $user_ids) ? ' checked' : '';
$fname = htmlspecialchars($row["Fname"]);
echo "
";
}
} else {
echo "Ingen brugere fundet i de valgte afdelinger.";
}? 提示:为提升可访问性,建议将 包裹在
✅ 补充建议:性能与健壮性优化
- 避免重复查询:若数据量较大,可考虑单次联合查询 + PHP 分组,但当前双查询结构清晰、职责分明,推荐保留。
- 空值/异常处理:确保 $SetDepartmentView 非空且格式合法(如正则校验 ^[0-9,\\s]+$),防止 SQL 报错。
- 缓存考量:用户列表变动不频繁时,可引入 Redis 或 APCu 缓存部门用户结果,减少数据库压力。
通过以上改造,左右两侧列表逻辑解耦、语义明确,既满足业务需求,又兼顾安全性、可维护性与用户体验。
# php
# redis
# html
# 后端
# lsp
# red
# sql
# xss
# checkbox
# 整型
# 循环
# input
# 数据库
# 可选
# 勾选
# 第一个
# 第二个
# 报错
# 已将
# 是否存在
# 用户列表
# 比对
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Linux后台任务运行方法_nohup与&使用技巧【技巧】
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Laravel API资源类怎么用_Laravel API Resource数据转换
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
jQuery validate插件功能与用法详解
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
java中使用zxing批量生成二维码立牌
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
海南网站制作公司有哪些,海口网是哪家的?
Laravel如何实现API速率限制?(Rate Limiting教程)
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
如何快速搭建高效香港服务器网站?
C#如何调用原生C++ COM对象详解
javascript读取文本节点方法小结
网站制作报价单模板图片,小松挖机官方网站报价?
php json中文编码为null的解决办法
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何用VPS主机快速搭建个人网站?
打造顶配客厅影院,这份100寸电视推荐名单请查收
如何在建站宝盒中设置产品搜索功能?
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
如何在企业微信快速生成手机电脑官网?
Python文件操作最佳实践_稳定性说明【指导】
微信小程序 闭包写法详细介绍
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
EditPlus 正则表达式 实战(3)
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
如何在IIS管理器中快速创建并配置网站?
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
Swift中循环语句中的转移语句 break 和 continue
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
使用C语言编写圣诞表白程序
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
Internet Explorer官网直接进入 IE浏览器在线体验版网址
微信小程序 配置文件详细介绍
如何快速搭建安全的FTP站点?
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
如何快速完成中国万网建站详细流程?
在线制作视频网站免费,都有哪些好的动漫网站?
Laravel如何使用Eloquent进行子查询
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】


