Что вызывает:" обратите внимание: Неинициализированное смещение строки", чтобы появиться? [закрытый]
У меня есть форма, которую заполняют пользователи, и в форме есть несколько одинаковых полей, таких как "имя проекта", "дата проекта", "catagory" и т. д. Исходя из того, сколько форм пользователь отправляет, моя цель:
- цикл по количеству форм
- создать отдельные инструкции SQL insert
однако PHP бросает мне уведомление, которое я, кажется, не понимаю:
обратите внимание:
уведомления: Неинициализированное смещение строки: 1 ...dataPasser.php on line 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);
}
}
есть ссылки на эту проблему у меня есть, но они не являются точными, и у меня возникли проблемы с выводом, где происходит фактическая проблема. Я был бы очень признателен за любую помощь в понимании того, что вызывает массив не инициализировать должным образом.
5 ответов:
эта ошибка возникла бы, если бы любая из следующих переменных была фактически строками или null вместо массивов, и в этом случае доступ к ним с синтаксисом массива
$var[$i]
было бы похоже на попытку доступа к определенному символу в строке:$catagory $task $fullText $dueDate $empId
короче говоря, все в вашем запросе вставки.
возможно
$catagory
переменная пишется с ошибкой?
Это означает, что один из ваших массивов на самом деле не массив.
Кстати, Ваш если проверка не нужна. Если $varsCount равно 0, цикл for не будет выполняться в любом случае.
ошибка может возникнуть, когда число раз, когда вы повторяете массив больше, чем фактический размер массива. например:
$one="909"; for($i=0;$i<10;$i++) echo ' '.$one[$i];
покажет ошибку. в первом случае u может принять мод 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' ;