2012-02-20 213 views
0

我有這段代碼,它並沒有在數據庫中插入值。我究竟做錯了什麼?Foreach循環無法正常工作

while ($rij = mysql_fetch_assoc($doquery2)) 
{ 
    $user_id = $rij['id']; 
} 

$cat = $_POST['cat']; 

foreach($cat as $key => $value) 
{ 
    //$sql = ""; 

    if ($value > 0) 
    { 
     $sql = sprintf("INSERT INTO cat VALUES('','$user_id','%s');",$value); 
     mysql_query($sql); 
    } 
} 

在我的形式每個複選框構建如下:

<input type="checkbox" name="cat[]" value="Lifestyle"> 

我到底做錯了什麼?

+0

注意如果複選框沒有被選中,它根本不會提交。 – 2012-02-20 15:34:51

+1

man,做一些調試......'print_r($ _ POST ['cat']);'。 'echo $ sql;'檢查'mysql_query'調用的返回值。我認爲這回答你的問題。 – 2012-02-20 15:35:16

+0

你不'mysql_real_escape_string()''你$ user_id'和你的'$ value' - 這是很糟糕... – glglgl 2012-02-20 15:41:35

回答

2

如果我沒有記錯的話,一個未經檢查的值根本不會傳遞給$ _POST。所以你可以剝掉檢查$值的行。我想你可能會遇到不同的瀏覽器發送不同值的問題。所以試試這個:

foreach($cat as $key => $value) 
{ 
    //$sql = ""; 

    $sql = sprintf("INSERT INTO cat VALUES('','$user_id','%s');",$value); 
    mysql_query($sql); 
} 
+0

非常感謝,這工作!我之前使用了確切的代碼,然後它正在工作,所以我不知道是什麼導致了這個問題。無論如何它工作,所以謝謝! – Andre 2012-02-20 15:41:50

+0

不客氣!這是我注意到的一個新問題,最近完全破壞了我的幾個網站,所以我感到你的痛苦。 – 2012-02-20 15:56:36

0

你在哪裏將$ _REQUEST ['cat']/$ _ GET ['cat']/$ _ POST ['cat']轉換爲$ cat ...你似乎在循環一個名爲$ cat的數組,但我認爲你習慣於使用register_globals,而你的服務器不再支持它。這就是爲什麼它沒有達到你的期望。

但我可能是錯的...

1

你應該記錄你的sql語句並記錄任何mysql_error()。

而且你的陣列將是一個常規的索引基於陣列的,所以你應該使用(雖然這可能不是你的錯誤的來源)

foreach($cat as $value) 
+0

的foreach看起來更好這樣一來,如果你不使用鑰匙..但沒關係。 – 2012-02-20 15:40:19

0

你忘了包括表列也;這裏不需要

$sql = sprintf("INSERT INTO cat (id, user,category) VALUES('','$user_id','%s')",$value); 
+0

這應該是沒有問題的 - 如果沒有給出,MySQL將假定「所有的表格都是按照表格順序排列的」。 – glglgl 2012-02-20 15:40:24

+0

mysql的生活中可以沒有表的字段(雖然它是不好的做法) – 2012-02-20 15:41:52

+0

也許,但我不認爲他在這裏使用的所有列和'價值是可疑的太 – Vytautas 2012-02-20 15:43:56