Подтвердить что ты не робот

Какие причины: "Обратите внимание: появилось неинициализированное смещение строки"?

У меня есть форма, которую заполняют пользователи. В форме есть несколько одинаковых полей, таких как "имя проекта", "дата проекта", "категория" и т.д. На основании того, сколько форм пользователь отправляет:

Моя цель:

  • цикл над числом форм
  • создавать отдельные инструкции вставки 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);     
  }
}

Есть ссылки на этот вопрос, который у меня есть, но они не являются точными, и у меня возникают проблемы с выводом, из которого возникает настоящая проблема. Я был бы очень признателен за любую помощь в понимании того, что приводит к неправильной инициализации массива.

4b9b3361

Ответ 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>';