2015-07-03 151 views
0

所以我有三个表:勾选复选框

docs 
    doc_id 

cats 
    cat_id 

doc_cat_join 
    id 
    doc_id 
    cat_id 

我创建了一个方法来创建一个文档(很像POST)和类别的文档进入文档表和类别去进入猫表。编辑文档时,我通过一个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,然后告诉我连接表中是否存在任何行,从而使我回想起期望的行数我正在编辑的文档。我需要找到一个方法来勾选复选框,但我真的很挣扎。

回答

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>'; 
+0

嗯,所以它仍然蜱所有的复选框,即使更改建议。 – PhpDude

+0

如果它已检查属性,它将被检查。一秒钟的编辑。 – taxicala

+0

好的,现在没有勾选的复选框...(即使行存在于连接表中) – PhpDude