1 回答

TA贡献1874条经验 获得超12个赞
您正在循环访问您的结果。这意味着对于每个循环,您将一个变量设置为“选中”,其余变量设置为空字符串。因此,将只检查最后一个。创可贴修复是将取消选中设置为循环外的默认,然后仅在需要时更改为选中。
但真正的解决方法是从数据库中提取此信息并使用它,而不是手动将数据库 ID 映射到标签。通过将条件移动到连接中,可以拉取所有类别。将检查具有工具 ID 的行,而不检查其他行。您还将提取类别名称和 ID,以便以编程方式生成复选框。
有关 DB 示例,请参阅此处:http://sqlfiddle.com/#!9/20b223/14/0
$tool = find_tool_by_id($id);
$tool["categories"] = [];
$sql = "SELECT c.category_name, c.category_ID, tc.tool_id
FROM category c
LEFT JOIN tool_category tc ON c.category_ID = tc.category_id
AND tc.tool_id = ?";
$stmt = $db->prepare($sql);
$stmt->bind_param("i", $_GET["id"]);
$result = $stmt->execute();
while($row = $stmt->fetch_assoc()) {
$id = $row["category_ID"];
$name = $row["category_name"];
$checked = $row["tool_id"] ? "checked" : "";
$tool["categories"][$id] = ["name" => $name, "checked" => $checked];
}
现在,稍后您可以执行此操作以自动构建所有复选框输入:
<?php foreach ($tool["categories"] as $id=>$category): ?>
<input type="checkbox" name="category_ID[]" id="category_<?=$id?>" value="<?=$id?>" <?=$category["checked"]?>>
<label for="category_<?=$id?>">
<?=htmlspecialchars($category["name"])?>
</label><br/>
<?php endforeach ?>
- 1 回答
- 0 关注
- 73 浏览
添加回答
举报