是什么原因:“注意:未初始化的字符串偏移”出现?

时间:2009-08-12 00:11:42

标签: php arrays

我有一个用户填写的表单,在表单上有多个相同的字段,如“项目名称”,“项目日期”,“catagory”等。根据用户提交的表单数量,我的目标是:

  1. 循环表格数
  2. 创建单独的SQL插入语句
  3. 但是,PHP会向我发出一条我似乎不理解的通知:

    注意:

      

    注意:第90行未初始化的字符串偏移量:1 ... 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);     
      }
    }
    

    我有这个问题的参考,但它们并不准确,我无法推断实际问题源于何处。我非常感谢任何有助于理解导致数组未正确初始化的原因。

5 个答案:

答案 0 :(得分:57)

如果以下任何变量实际上是字符串或null而不是数组,则会发生此错误,在这种情况下,使用数组语法$var[$i]访问它们就像尝试访问字符串中的特定字符一样:< / p>

$catagory
$task
$fullText
$dueDate
$empId

简而言之,插入查询中的所有内容。

也许$catagory变量拼写错误了?

答案 1 :(得分:14)

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

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

答案 2 :(得分:9)

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

 $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];

答案 3 :(得分:2)

在使用阵列之前尝试测试并初始化阵列:

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]不存在,则创建(未初始化)一个......这就是全部; =&GT; PHP尝试在地址$i中读取您的表格,但在此地址,没有任何内容,此地址不存在=&gt; PHP会给你一个通知,它不会给你任何字符串。 所以你的代码不是很干净,它会占用你服务器性能的一些资源(只是很少)。

注意你的MySQL表默认值

if( !isset($dueDate[$i]) ) $dueDate[$i] = '0000-00-00 00:00:00' ;

if( !isset($dueDate[$i]) ) $dueDate[$i] = 'NULL' ;

答案 4 :(得分:1)

使用

查看数组的内容
echo '<pre>' . print_r( $arr, TRUE ) . '</pre>';