为什么这个简单的PHP / MySQL代码不起作用?

时间:2010-03-28 02:47:47

标签: php mysql

我是php / mysql的新手,这让我松了一口气,我正在尝试构建一个多级网站导航。在我的脚本的这一部分中,我正在准备来自表单的子类和父类,以便插入到数据库中:

// get child categories
$catFields = $_POST['categories'];

if (is_array($catFields)) {
  $categories = $categories;

  for ($i=0; $i<count($catFields); $i++) {
    $categories = $categories . $catFields[$i];
  }
}

// get parent category    
$select = mysql_query ("SELECT parent FROM categories WHERE id = $categories");

while ($return = mysql_fetch_assoc($select)) {    
  $parentId = $return['parent'];
}

我的脚本的第一部分工作正常,它通过选中表单中的复选框并准备好插入数据库来抓取用户选择分配帖子的所有类别。

但第二部分不起作用,我无法理解为什么。我试图将一个类别与存储在它自己的表中的父类匹配,但即使类别都有父类,它也不返回任何内容。谁能告诉我为什么会这样?

P.S。 $categories变量包含子类别ID。

4 个答案:

答案 0 :(得分:2)

我可以看到一些错误:

$categories = $categories;

应该是

$categories = '';

由于会有categories以上,因此您必须使用MySQL in子句:

SELECT parent FROM categories WHERE id in ($categories)

要发生这种情况,您必须通过将for循环更改为以下内容,使categories成为逗号分隔列表:

for ($i=0; $i<count($catFields); $i++) 
    $categories .= "$catFields[$i],"; // append 'id,' to existing list.
trim($categories,','); // remove any trailing commas.

答案 1 :(得分:1)

$categories似乎它是一个包含多个值的字符串,您正在使用的SQL引擎无法仅在=条件下使用。您可能需要更改它,以便您的SQL看起来像WHERE id IN (1,2,3),其中1,2,3等是您想要匹配的ID。

答案 2 :(得分:0)

  1. AFAIK,$ _POST是一个数组。 $ _POST ['categories']来自多选html表单元素的数据吗?
  2. 您在$ _POST ['categories']中发送了哪些数据?你怎么期望成为一个阵列?如果在将数据提交到PHP脚本之前将数据编码为类似数组的数组,则可能必须手动将其插入到数组中。

    1. 使用

      $ select = mysql_query(“SELECT parent FROM categories WHERE id IN(”。implode(“,”,$ array)。“)”);

答案 3 :(得分:0)

并且不要忘记查询中的mysql_real_escape_string()和引号',您的相关代码很容易被SQL注入。准备好的陈述(PDO或MySQLi)也是如此。

但不要相信用户输入!