2009-08-12 24 views
48

我有一個表格,用戶填寫,表格中有多個相同的字段,如「項目名稱」,「項目日期」,「類別」等。基於用戶提交的表格數量:什麼原因導致:「注意:未初始化的字符串偏移量」出現?

我的目標是:

  1. 遍歷的形式數
  2. 創建單獨的SQL INSERT語句

然而,PHP拋出我發現我好像不明白:

注意:

注意:未初始化字符串偏移量:1 ... dataPasser.php上線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);  
    } 
} 

有這種引用問題我有,但他們不是確切的,我無法推斷出實際問題源於何處。我將非常感謝在理解什麼導致數組無法正確初始化的幫助。

+0

內容你留下很多了例子,但有什麼的var_dump($更改爲MyQuery)的輸出? – koen 2009-08-12 00:22:50

+0

90線在哪裏,什麼是完整的通知? – 2009-08-12 00:34:50

+1

我只是想補充一點,你根本不需要使用array_push。只要做到這一點。 $ myQuery [] = $ var; – calumbrodie 2011-06-25 17:23:26

回答

53

如果任何下列變量的實際上是字符串或空的,而不是陣列將發生該錯誤,在這種情況下,以與陣列語法$var[$i]訪問它們會像試圖在一個串來訪問一個特定的字符:

$catagory 
$task 
$fullText 
$dueDate 
$empId 

總之,在插入查詢中的一切。

也許$catagory變量拼寫錯了?

+0

男人,我只是想踢自己的頭。當然!只有1個獨特的$ empId。我專注於$ myQuery數組,我沒有注意到其他人。非常感謝!我將$ empID [$ i]更改爲$ empId,通知消失,$ empId不是數組。 – 2009-08-12 00:26:20

+0

我認爲這裏的一部分困惑是,當索引'$ var [$ i]'時,它可能是一個字符串或一個數組... – 2010-06-30 23:26:43

+0

+1 For Perfect Ans(Y)...! – 2013-04-04 19:51:22

13

這意味着你的一個數組實際上不是一個數組。

順便說一下,你的if檢查是不必要的。如果$ varsCount爲0,for循環將不會執行。

+0

是啊,我以前見過這個評論。不幸的是,我不明白它不是一個數組?我將數據輸出到FirePHP中,我通過POST看到它,然後在變量中看到它。 – 2009-08-12 00:20:09

+0

好的謝謝,我只發佈了一部分代碼,以便於閱讀。再次感謝! – 2009-08-12 00:24:43

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]不存在,你創建(未初始化)一個......這一切; => PHP嘗試讀取地址$i中的表格,但在此地址處沒有任何內容,此地址不存在=> PHP會向您返回通知,並且它不會向您提供任何字符串。 因此,你的代碼不是很乾淨,它需要一些資源來降低服務器的性能(只是很少)。

你的MySQL表的默認值

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

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

正確,但如果它應該是一個數組,if(!isset($ myarray [$ i]))$ myarray [$ i] = array();'或許? – 2010-06-30 23:25:01

9

時的次數,你遍歷數組比數組的實際大小更大,可能會出現錯誤保重。例如:

$one="909"; 
for($i=0;$i<10;$i++) 
    echo ' '.$one[$i]; 

將顯示錯誤。 第一種情況下美國可以採取我的MOD ..例如

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

退房的陣列與

echo '<pre>' . print_r($arr, TRUE) . '</pre>'; 
相關問題