У меня есть форма, которую заполняют пользователи. В форме есть несколько одинаковых полей, таких как «имя проекта», «дата проекта», «категория» и т. Д. В зависимости от того, сколько форм пользователь отправляет:
Моя цель:
Однако PHP бросает мне УВЕДОМЛЕНИЕ, которое я, похоже, не понимаю:
Обратите внимание:
Примечание. Неинициализированное смещение строки: 1 … dataPasser.php в строке 90
PHP
$myQuery = array(); if ($varsCount != 0) { for ($i=0; $i <= $varsCount; $i++) { $var = "insert into projectData values ('" . $catagory[$i] . "', '" . $task[$i] . "', '" . $fullText[$i] . "', '" . $dueDate[$i] . "', null, '" . $empId[$i] ."')"; array_push($myQuery, $var); } }
Есть ссылки на этот вопрос, который у меня есть, но они не являются точными, и у меня возникают проблемы с выводом того, откуда возникает настоящая проблема. Я был бы очень признателен за любую помощь в понимании того, что заставляет массив не инициализировать должным образом.
Эта ошибка возникла бы, если бы какая-либо из следующих переменных была фактически строками или null вместо массивов, и в этом случае обращение к ним с синтаксисом массива $var[$i]
было бы похоже на попытку доступа к определенному символу в строке:
$catagory $task $fullText $dueDate $empId
:$catagory $task $fullText $dueDate $empId
,$catagory $task $fullText $dueDate $empId
Короче говоря, все в вашем запросе вставки.
Возможно, переменная $catagory
имеет орфографическую ошибку?
Это означает, что один из ваших массивов на самом деле не массив.
Кстати, ваша проверка не нужна. Если $ varsCount равен 0, цикл for не будет выполняться в любом случае.
Ошибка может произойти, когда количество повторений массива больше, чем фактический размер массива. например:
$one="909"; for($i=0;$i<10;$i++) echo ' '.$one[$i];
покажет ошибку. первый случай u может взять mod i .. например
function mod($i,$length){ $m = $i % $size; if ($m > $size) mod($m,$size) return $m; } for($i=0;$i<10;$i++) { $k=mod($i,3); echo ' '.$one[$k]; }
или, может быть, это не массив (возможно, это значение, и вы пытались получить к нему доступ, например массив):
$k = 2; $k[0];
Попробуйте протестировать и инициализировать свои массивы до их использования:
if( !isset($catagory[$i]) ) $catagory[$i] = '' ; if( !isset($task[$i]) ) $task[$i] = '' ; if( !isset($fullText[$i]) ) $fullText[$i] = '' ; if( !isset($dueDate[$i]) ) $dueDate[$i] = '' ; if( !isset($empId[$i]) ) $empId[$i] = '' ;
Если $catagory[$i]
не существует, вы создаете (неинициализированный) один … вот и все; => PHP попытается прочитать в вашей таблице адрес $i
, но по этому адресу ничего нет, этот адрес не существует => PHP возвращает вам уведомление, и оно ничего не помещает вам в строку. Таким образом, вы не очень чисты, вам нужны ресурсы, которые снижают производительность вашего сервера (очень мало).
Позаботьтесь о значениях по умолчанию для таблиц MySQL
if( !isset($dueDate[$i]) ) $dueDate[$i] = '0000-00-00 00:00:00' ;
или
if( !isset($dueDate[$i]) ) $dueDate[$i] = 'NULL' ;
Проверьте содержимое своего массива с помощью
echo '<pre>' . print_r( $arr, TRUE ) . '</pre>';