在表列中插入多个复选框

时间:2015-05-13 23:03:24

标签: php mysql

我有一个文件表,其中一部分是分配给某个类别的文档。 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),但希望它与我的doc表单提交分开:

    <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 ;

1 个答案:

答案 0 :(得分: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。

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