什么原因造成:“注意:未初始化的string偏移量”出现?

我有一个用户填写的表单,表单上有多个相同的字段,如“项目名称”,“项目date”,“类别”等。根据用户提交的表格数量:

我的目标是:

  1. 循环表格的数量
  2. 创build单独的SQL插入语句

但是,PHP给我一个通知,我似乎不明白:

注意:

注意:未初始化的string偏移量:1 …第90行的dataPasser.php

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); } } 

有这个问题我有,但他们不是确切的,我无法推断实际问题来自哪里。 我将不胜感激任何帮助,了解是什么导致arrays不正确初始化。

如果以下任何一个variables实际上是string或null而不是数组,那么会发生这个错误,在这种情况下,使用数组语法$var[$i]访问它们就像试图访问string中的特定字符:

 $catagory $task $fullText $dueDate $empId 

总之,在插入查询中的一切。

也许$catagoryvariables拼写错误?

这意味着你的一个数组实际上不是一个数组。

顺便说一下,你的检查是不必要的。 如果$ varsCount是0,for循环将不会执行。

当迭代数组的次数大于数组的实际大小时,可能会发生错误。 例如:

  $one="909"; for($i=0;$i<10;$i++) echo ' '.$one[$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]; 

尝试在使用它们之前testing并初始化您的数组:

 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]不存在,则创build(未初始化)一个…就是这样; => PHP尝试在你的表上读取地址$i ,但是在这个地址上,没有任何东西,这个地址不存在=> PHP返回给你一个通知,并且它不会给你任何string。 所以你的代码不是很干净,需要一些资源来降低服务器的性能(只是很less)。

注意你的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>';