【问题标题】:get checked checkboxes from database从数据库中获取选中的复选框
【发布时间】:2015-05-27 02:21:55
【问题描述】:

我正在寻找一种方法来检查复选框是否已分配给数据库中的类别。

<?php 


try{
    // Selecting entire row from cat_list table
    $results = $dbh->query("SELECT cat_id, cat_title FROM cat_list");

}catch(Exception $e) {
    echo $e->getMessage();
    die();
}
    $category = $results->fetchAll(PDO::FETCH_ASSOC);
?>

<br>
<label><input type="checkbox" name="" class="selectall"/> Select all</label>
<div id="checkboxlist" >
<?php
    foreach($category as $cat){ 
?>

<input type="checkbox" value="<?php echo $cat["cat_id"];  ?>" <?php echo ($cat['cat_id'] == 1) ? 'checked="checked"' : ''; ?> name="cat_no[]" id="box1"> <?php echo $cat["cat_title"]; ?></a><br>

<?php
}

因此,当我创建帖子时,我从显示为数组的可用类别中选择,上面的代码取自我的编辑帖子表单,因此我希望它检索我分配给它的类别并勾选框。

我有 3 张桌子:

doc_list (Stores documents)
cat_list (Stores Categories)
cat_doc_link_table (stores the doc_id & cat_id from the previous two tables)

它们的形成方式如下:

CREATE TABLE `cat_doc_link_table` (
`id` int(11) NOT NULL,
  `link_cat_id` int(11) NOT NULL,
  `link_doc_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE `cat_list` (
`cat_id` int(11) NOT NULL,
  `cat_title` varchar(32) NOT NULL,
  `cat_color` varchar(20) NOT NULL,
  `cat_icon` text NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=utf16 AUTO_INCREMENT=66 ;

CREATE TABLE `doc_list` (
`doc_id` int(11) NOT NULL,
  `doc_title` varchar(50) NOT NULL,
  `doc_content` text NOT NULL,
  `doc_created` datetime NOT NULL,
  `user_id` int(11) NOT NULL,
  `doc_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB  DEFAULT CHARSET=utf16 AUTO_INCREMENT=295 ;

【问题讨论】:

  • 你遇到了什么问题?
  • @DaGhostmanDimitrov 这样我就可以将帖子插入到数据库中,包括我选择的类别(有一个连接表,它采用帖子中的 id 和类别中的 id)并以这种方式存储值.这个想法是让我能够回到帖子,并且它已经勾选了我分配给它的复选框。
  • 这很好,但我似乎无法弄清楚您发布的代码有什么问题以及您面临的问题是什么?请注意,没有正确问题陈述的问题最终会被关闭,并且不符合常见问题解答中的 SO 精神(请参阅stackoverflow.com/help/on-topic
  • @DaGhostmanDimitrov 存在问题,因为我尝试做的事情不起作用?
  • 查看我链接的常见问题解答,这类问题被认为是题外话。

标签: php html checkbox


【解决方案1】:

将选定的 cat_id 放入 array() 中。然后使用 in_array() 来检查。

// query your db to return an array of cat_id's for the specified post.
$cats_array = array('123', '124', '156');

foreach($category as $cat){
 // compare
 if(in_array($cat['cat_id'], $cats_array)) { 
   // cat checked
 }else{
   // not checked
 }
}

【讨论】:

  • 你能用我上面的代码给我看一个例子吗?
  • 我已尝试执行上述操作,因为我遇到白屏时一定有错误
  • 您需要查询具有 postid 和 catid 的表,获取这些结果并为指定的帖子创建一个仅包含 catid 的数组。获得数组后,在 foreach 语句中添加 in_array 条件。
  • 但这与我从上面的类别表中获取数据不会有冲突吗?
  • 不,不会。据我了解您的表格方案,您将 post_id 和 cat_id 存储在每个检查类别的另一个表格中。 "select cat_id from table where post_id = '$post_id'" ... 将返回的 cat_id 添加到 $cats_array() 中。
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多