从WHILE循环中勾选复选框

时间:2015-07-03 23:01:58

标签: php mysql

所以我有三张桌子:

docs
  doc_id

cats
  cat_id

doc_cat_join
  id
  doc_id
  cat_id

我创建了一种创建文档的方法(很像帖子),并将文档分类到文档表中,类别进入猫表。在编辑文档时,我通过while循环显示可用的类别。这非常适用于我勾选它的doc_id形式的url和你勾选的复选框的cat_id。我想要做的是当我再返回并再次编辑时,它只显示我之前选择的复选框中的刻度,通过查看连接表。

以下是我目前如何循环并显示类别:

<?php
function build_cat_checkboxes(){

    global $dbc;
    global $id;

    $q = "SELECT * FROM cats";
    $r = mysqli_query ($dbc, $q); // Run the query.

    $currentDoc = $id;

    while ($row = mysqli_fetch_array($r)) {

    $checked = (($row['cat_id'] == $currentDoc) ? 'checked' : '');

    echo '<ul>
          <li><label>
            <input type="checkbox" name="cat_id[]" value="' . $row['cat_id'] . '"  checked="'.$checked.'"> ' . $row["cat_name"] . '</label></li>
          </ul>';
    }

}
?>

正如你所看到的,我已经尝试创建一种检查它们的方法,但它只是在勾选所有方框,因为我的查询显然是错误的,因为它不检查连接表以查看doc_id是否与cat_id相关联

因此...

我把这个问题放在一起:

$q1 = "SELECT * FROM doc_cat_join WHERE doc_id = '$id'";
$r1 = mysqli_query($dbc, $q1);

如果我对它进行了print_r,它会通过将doc_id格式化为url然后显示连接表中是否存在任何行来向我提供我期望的行数与我正在编辑的文档相关联。我需要找到一种勾选复选框的方法,但我真的很挣扎。

1 个答案:

答案 0 :(得分:0)

您将在语句中将boolean全部放在括号内;

替换:

$checked = ($row['cat_id'] == $currentDoc) ? 'checked' : '';
<input type="checkbox" name="cat_id[]" value="' . $row['cat_id'] . '"  checked="'.$checked.'"> ' . $row["cat_name"] . '</label></li>
</ul>';

使用:

$checked = (($row['cat_id'] == $currentDoc) ? 'checked="checked"' : '');
<input type="checkbox" name="cat_id[]" value="' . $row['cat_id'] . '" '.$checked.'"> ' . $row["cat_name"] . '</label></li>
</ul>';