Foreach循环无法正常工作

问题描述:

我有这段代码,它并没有在数据库中插入值。我究竟做错了什么?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

如果我没有记错的话,一个未经检查的值根本不会传递给$ _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

你在哪里将$ _REQUEST ['cat']/$ _ GET ['cat']/$ _ POST ['cat']转换为$ cat ...你似乎在循环一个名为$ cat的数组,但我认为你习惯于使用register_globals,而你的服务器不再支持它。这就是为什么它没有达到你的期望。

但我可能是错的...

你应该记录你的sql语句并记录任何mysql_error()。

而且你的阵列将是一个常规的索引基于阵列的,所以你应该使用(虽然这可能不是你的错误的来源)

foreach($cat as $value) 
+0

的foreach看起来更好这样一来,如果你不使用钥匙..但没关系。 – 2012-02-20 15:40:19

你忘了包括表列也;这里不需要

$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