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
相关产品推荐
相关产品推荐

