Php 无法插入复选框以获取未定义的变量反馈
我有一个奇怪的地方在这里-所以我显示了一个列表的类别从我的数据库作为复选框时,创建一篇文章。我勾选了这篇文章属于哪一个,它应该带上doc_id和cat_id表单,并勾选了哪个框。当我打开错误报告时,我得到以下信息:Php 无法插入复选框以获取未定义的变量反馈,php,mysqli,Php,Mysqli,我有一个奇怪的地方在这里-所以我显示了一个列表的类别从我的数据库作为复选框时,创建一篇文章。我勾选了这篇文章属于哪一个,它应该带上doc_id和cat_id表单,并勾选了哪个框。当我打开错误报告时,我得到以下信息: Notice: Undefined index: cat_id in /Applications/MAMP/htdocs/admin/actions/new_doc.inc.php on line 53 array(4) { ["doc_name"]=> string(2) "
Notice: Undefined index: cat_id in /Applications/MAMP/htdocs/admin/actions/new_doc.inc.php on line 53
array(4) { ["doc_name"]=> string(2) "df" ["doc_owner"]=> string(3) "dsf" ["doc_content"]=> string(3) "dsf" ["submit"]=> string(0) "" }
这是指这里的这一行:
$cat_ids = $_POST['cat_id'];
整个代码块如下所示:
if (empty($errors)) {
// MAKING THE QUERY
$q = "INSERT INTO docs (doc_name, doc_content, doc_owner, created_date) VALUES ('$dn', '$dc', '$do', NOW() )";
$r = mysqli_query($dbc, $q);
if ($r) {
$doc_id = mysqli_insert_id($dbc);
$query = "INSERT INTO doc_cat_join (cat_id,doc_id) VALUES ";
$cat_ids = $_POST['cat_id'];
$length = count($cat_ids);
for ($i = 0; $i < count($cat_ids); $i++) {
$query.='(' . $cat_ids[$i] . ',' . $doc_id . ')';
if ($i < $length - 1)
$query.=',';
}
mysqli_query($dbc, $query);
mysqli_close($dbc);
if(空($errors)){
//提出质询
$q=“在文档中插入(文档名称、文档内容、文档所有者、创建日期)值(“$dn”、“$dc”、“$do”、NOW())”;
$r=mysqli_查询($dbc,$q);
如果($r){
$doc\u id=mysqli\u insert\u id($dbc);
$query=“插入到文档目录连接(目录id,文档id)值中”;
$cat\u id=$\u POST['cat\u id'];
$length=计数($cat_id);
对于($i=0;$i
下面是我如何显示复选框的:
<?php
function build_cat_checkboxes(){
global $dbc;
$q = "SELECT * FROM cats";
$r = mysqli_query ($dbc, $q); // Run the query.
// FETCH AND PRINT ALL THE RECORDS
while ($row = mysqli_fetch_array($r)) {
echo '<ul><li><label><input type="checkbox" name="cat_id[]" value="' . $row['cat_id'] . '"> ' . $row["cat_name"] . '</label></li></ul>';
}
}
?>
我无法理解为什么它不能插入doc_cat_join表,而like提到它应该使用doc_id和cat_id,并将它们作为一个具有id的新行插入
下面是该表视图的一个示例:
如果未勾选复选框,则根本不会有POST参数cat\U id。
因为这也意味着文档没有分配到单个类别,这可能是输入验证/错误处理的一部分
if (empty($errors)) {
if (!isset($_POST['cat_id'])) {
die('no category assigned'); // or maybe a bit more sophisticated error handling
}
注意!你应该绑定你的参数。从我上面的例子来看,在我的数据库表中选择和插入数据的更好方法是什么?使用MySQLi
prepare
、bind
和execute
方法。我在上面发布的链接中有一个例子。但是你是否建议我从MySQLi_uuuu转到PDO?否。L在“MySQLi”标题下查看示例,或在“Prepared statements”下查看。