You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP根据数据库值批量勾选复选框异常:仅勾选单个值求助

问题分析与修复方案

核心问题1:字段值含空格导致匹配失败

数据库中jenis字段若以逗号+空格格式存储(如checkup, vaksinasi, usg),使用explode(",", $row['jenis'])拆分后,数组元素会带有前导空格(例如' vaksinasi'),此时in_array("vaksinasi", $jenis)无法匹配到对应元素,导致复选框无法被勾选。

修复代码:拆分后去除每个元素的前后空格

$jenis = explode(",", $row['jenis']);
$jenis = array_map('trim', $jenis); // 清理数组元素的空格

核心问题2:不必要的循环导致重复渲染

如果nopemeriksaan是唯一标识,查询结果只会返回单条记录,外层的while循环会重复渲染所有复选框组。最终页面会出现多组相同的复选框,用户看到的可能是最后一组(若该组的$jenis仅含单个值,就会表现为只勾选一个)。

修复代码:移除循环,直接读取单条记录

$result = mysqli_query($kon,"SELECT jenis FROM pasien WHERE nopemeriksaan = $nopemeriksaan"); 
$row = mysqli_fetch_array($result);
$jenis = $row ? array_map('trim', explode(",", $row['jenis'])) : [];

次要问题:HTML语法错误

USG对应的label标签存在语法错误(多了一个引号):

<label"> USG </label><br>

修复为:

<label> USG </label><br>

额外安全提示:SQL注入风险

直接将$nopemeriksaan拼接进SQL语句存在严重的SQL注入风险,建议使用预处理语句:

$stmt = mysqli_prepare($kon, "SELECT jenis FROM pasien WHERE nopemeriksaan = ?");
mysqli_stmt_bind_param($stmt, "s", $nopemeriksaan); // 字符串类型用"s",数字类型用"i"
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_array($result);
$jenis = $row ? array_map('trim', explode(",", $row['jenis'])) : [];

内容的提问来源于stack exchange,提问作者choco mufflin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:01:18