Какие причины: "Обратите внимание: появилось неинициализированное смещение строки"?
У меня есть форма, которую заполняют пользователи. В форме есть несколько одинаковых полей, таких как "имя проекта", "дата проекта", "категория" и т.д. На основании того, сколько форм пользователь отправляет:
Моя цель:
- цикл над числом форм
- создавать отдельные инструкции вставки SQL
Однако 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);
}
}
Есть ссылки на этот вопрос, который у меня есть, но они не являются точными, и у меня возникают проблемы с выводом, из которого возникает настоящая проблема. Я был бы очень признателен за любую помощь в понимании того, что приводит к неправильной инициализации массива.
Ответы
Ответ 1
Эта ошибка возникла бы, если бы какая-либо из следующих переменных была фактически строками или null вместо массивов, и в этом случае обращение к ним с синтаксисом массива $var[$i]
было бы похоже на попытку доступа к определенному символу в строке:
$catagory
$task
$fullText
$dueDate
$empId
Короче говоря, все в вашем запросе на ввод.
Возможно, переменная $catagory
написана с ошибкой?
Ответ 2
Это означает, что один из ваших массивов не является массивом.
Кстати, ваша проверка не нужна. Если $varsCount равен 0, цикл for не будет выполняться в любом случае.
Ответ 3
Ошибка может возникать, когда количество повторений итерации массива больше, чем фактический размер массива. например:
$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];
Ответ 4
Попробуйте протестировать и инициализировать свои массивы перед их использованием:
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' ;
Ответ 5
Проверьте содержимое вашего массива с помощью
echo '<pre>' . print_r( $arr, TRUE ) . '</pre>';