Что вызывает:" обратите внимание: Неинициализированное смещение строки", чтобы появиться? [закрытый]


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

  1. цикл по количеству форм
  2. создать отдельные инструкции 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 52

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' ;

проверьте содержимое вашего массива с помощью

echo '<pre>' . print_r( $arr, TRUE ) . '</pre>';