我有一个文件表,其中一部分是分配给某个类别的文档。 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 ;
答案 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。
从文档到类别的关系称为多对多关系,在数据库中,需要第三个表(中间)。