什么原因造成:“注意:未初始化的string偏移量”出现?
我有一个用户填写的表单,表单上有多个相同的字段,如“项目名称”,“项目date”,“类别”等。根据用户提交的表格数量:
我的目标是:
- 循环表格的数量
- 创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
总之,在插入查询中的一切。
也许$catagory
variables拼写错误?
这意味着你的一个数组实际上不是一个数组。
顺便说一下,你的检查是不必要的。 如果$ 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>';