我有一个用户填写的表单,在表单上有多个相同的字段,如“项目名称”,“项目日期”,“catagory”等。根据用户提交的表单数量,我的目标是:
但是,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);
}
}
我有这个问题的参考,但它们并不准确,我无法推断实际问题源于何处。我非常感谢任何有助于理解导致数组未正确初始化的原因。
答案 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>';