У меня странное здесь, поэтому я показываю список категорий из своей базы данных как флажки при создании сообщения. Я отмечаю, к каким из них принадлежит сообщение, и он должен взять 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) "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);
И вот как я показываю флажки:
<?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, где, как уже упоминалось, нужно брать doc_id и cat_id и вставлять их в новую строку с идентификатором.
Вот пример этого вида таблицы:
Если флажок не установлен, параметр POST cat_id вообще не будет установлен.
Поскольку это также означает, что документ не привязан к одной категории, это может быть частью проверки правильности ввода/обработки.
if (empty($errors)) {
if (!isset($_POST['cat_id'])) {
die('no category assigned'); // or maybe a bit more sophisticated error handling
}