2015-05-13 107 views
0

我有一个文档表,其中一部分是文档被分配到一个类别。对于doc_list表看起来是这样的:将多个复选框插入表列

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, 
    `doc_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `user_id` int(11) NOT NULL, 
    `cat_no` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf16 AUTO_INCREMENT=122 ; 

我有手动分配cat_no(这是类别ID),但希望它是除了我的文档形式提交:

<form action="actions/newDocAdd.php" method="post" id="rtf" name=""> 
     <input type="text" name="doc_title" id="doc_title" required="required" placeholder="Document Title"/><br /> 


     <?php 

     try{ 
      $results = $dbh->query("SELECT * FROM cat_list ORDER BY cat_title ASC "); 

     }catch(Exception $e) { 
      echo $e->getMessage(); 
      die(); 
     } 

     $docs = $results->fetchAll(PDO::FETCH_ASSOC); 

     foreach($docs as $docs){ 

     echo ' 

       <input type="checkbox" name="cat_no" value="2" id="cat_no">'.$docs["cat_title"].'<br><br> 

      ';} 
     ?> 

     <textarea name="doc_content" id="doc_content" placeholder="Document Content" style="display: none;"></textarea> 
       <iframe name="editor" id="editor" style="width:100%; height: 600px;"></iframe> 

<br><br> 
<input onclick="formsubmit()" type="submit" value="Create Document" name="submit"/> 

     </form> 

现在它会显示我的类别并将它们显示为复选框,但由于某些文档可能分开多个类别,因此我想勾选这些框并将它们提交到数据库。

这里是类别表:

CREATE TABLE `cat_list` (
`cat_id` int(11) NOT NULL, 
    `cat_title` varchar(32) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf16 AUTO_INCREMENT=5 ; 
+0

文档可以有多个类别?如果是这样,你应该有一个doc_categories表。 – Devon

+0

它的工作原理 - 我确实需要一种方法来确保复选框提交您在Tick_list列表中的cat_no列中勾选的ID – PhpDude

回答

1

假设文件可以有多个类别:

首先,你需要组的复选框到一个数组。您可以通过在括号中使用相同的名称来完成此操作。

<input type="checkbox" name="cat_no[]" value="1" /> 
<input type="checkbox" name="cat_no[]" value="2" /> 
<input type="checkbox" name="cat_no[]" value="3" /> 

现在,当您提交表单时,$_POST['cat_no']将是一个包含检查值的数组。

对于正确的数据库规范化,您需要一个名为“doc_category”的新表。在此表中,你将有“DOC_ID”和“CAT_ID”的组合键:

doc_id | cat_id 
1  | 1 
1  | 2 
1  | 3 

这意味着DOC_ID 1属于1类,2和3

从文档的关系到类别称为多对多关系,在数据库中需要第三个表格(中间)。

+0

如何显示多对多关系或调用数据,因为目前我这样做:$ results = $ dbh-> prepare(“SELECT * FROM doc_list WHERE FIND_IN_SET(?,cat_no)”); – PhpDude

+0

好吧,我对第一部分做了修改,但是当我发布表单时,数据类型是一个TEXT列,但是当数据从表单发布时,它只是说'数组'这个词? – PhpDude

+0

@phpcoder,您需要使用JOIN从两个表中选择数据。研究更多关于SQL JOIN语法。您不能插入数组,您必须遍历它并将每个类别插入到doc_category表中。 – Devon