繁体   English   中英

在编辑表单上填充复选框

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM