所以我有三个表:
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/