[英]Populate Checkboxes on Edit Form
我有一个编辑页面,该页面在访问时填充。 输入值工作正常,但是我很难勾选类别复选框。 我从两个表中获取信息。 一个显示所有类别,另一个显示与该项目关联的类别。
以下代码无效,因为第二个while语句在第一轮中完成了循环。 有适当的方法可以做到这一点吗?
<?php $check_cats = mysql_query("SELECT * FROM item_categories WHERE itemid = '$itemid'") or die(mysql_error()); ?>
<?php $result = mysql_query("SELECT * FROM categories ORDER BY cname") or die(mysql_error()); ?>
<?php while($row = mysql_fetch_array( $result )) { ?>
<input type="checkbox" id="<?php echo $row['cname']; ?>" name="cat[]" value="<?php echo $row['id']; ?>"
<?php while($check_cat_rows = mysql_fetch_array( $check_cats )) {
if ($check_cat_rows['catid'] == $row['id']) {
echo 'checked="yes"';
}
}
} ?>
我的两张桌子:
TABLE `item_categories`
`id`
`itemid`
`catid`
TABLE `categories`
`id`
`cname`
您的基本结构可以使用改进。 您可以使用一个将两个表联接在一起的单个查询,而不是两个单独的查询和两个嵌套循环。 加入的数据的一部分将是“已检查”标志,您可以在循环中检查该标志并输出适当的html。
SELECT ..., categories.id AS checked
FROM item_categories
LEFT JOIN categories
ON (item_categories.catid = categories.id)
然后在循环时:
while($row = mysql_fetch_assoc()) {
$flag = ($row['checked') ? ' checked="yes"' : ''
...
}
整个结构的结构不正确,您不能假设两个结果会完美对齐,并且循环是错误的。 尝试这个:
SELECT *,
(case when id IN
(SELECT catid FROM item_categories WHERE itemid = '$itemid')
then 1 else 0 end) checked
FROM categories ORDER BY cname
现在,您只需运行一个查询,就可以使用一个不错的$row['checked']
!
SELECT *,
(case when categories.id IS NOT NULL
then 1 else 0 end) checked
FROM item_categories
LEFT JOIN categories
ON (item_categories.catid = categories.id)
WHERE itemid = '$itemid'
基于马克B和我的混合的基础上进行了改进...唯一的区别是查询处理测试category.id的有效性,而不是php
我不太了解您的问题,但是您希望在页面加载时选中该复选框吗? 在这种情况下,您必须在标签中添加“选中”
<input type="checkbox" name="option2" value="Butter" checked>
像这样吗
<?php
$query = <<<query
SELECT
c.id,
c.cname,
ifnull(ic.catid, '', 'checked="yes"') as checked
FROM
categories c
LEFT JOIN item_categories ic
ON ic.itemid = '$itemid'
AND ic.catid = c.id
ORDER BY
c.cname
query;
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result)) { ?>
<input type="checkbox" id="<?=$row['cname'];?>" name="cat[]" value="<?=$row['id'];?>" <?=$row['checked'];?>>
<?
}
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.