php - 在 WHILE 循环中勾选复选框

标签 php mysql

所以我有三个表:

docs
  doc_id

cats
  cat_id

doc_cat_join
  id
  doc_id
  cat_id

我创建了一种创建文档(很像帖子)的方法,并将文档的类别放入 docs 表中,并将类别放入 cats 表中。编辑文档时,我通过 while 循环显示可用类别。无论我勾选哪个,它都可以很好地工作,它会采用 url 中的 doc_id 和你勾选的复选框的 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 ,它会通过从 url 中获取 doc_id 来返回我期望的行数,然后向我显示其中是否有任何行与我正在编辑的文档关联的连接表。我需要找到一种方法来勾选复选框,但我真的很挣扎。

最佳答案

通过将其全部放在括号内,您将在语句中返回一个 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>';

关于php - 在 WHILE 循环中勾选复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215098/

相关文章:

php - 如何计算从一个日期到另一个日期的长天数并使用 CI 插入数据库表

php - 使用 PHP 检查互联网状态

具有动态名称的 PHP 方法链接

php - 如何获取 GROUP BY 查询的总行数?

php - 在 PHP mvc 中路由 url 的最有效方法?

c# - 调试已达到最大连接池

mysql - 使用 jpa 进行内连接和子查询

mysql - 如果我可以或应该如何在 Cassandra 中存储金钱/财务记录

php - MySQL:我需要根据相同的条件将多行中的相同列名拉到单个查询中

mysql - MySQL中如何替换包含特殊字符的长字符串