带有SQL的PHP​​动态菜单

时间:2011-08-22 14:04:40

标签: php sql menu

我遇到了以下问题,我有一个侧面菜单并基于$ _GET ['cat']它必须显示内容。

所以我调用了我的函数:function showCat($ cat),$ cat = $ _GET ['cat']。

showCat函数是这样的:

function showCat($cat){
$cat= mysql_real_escape_string($cat); 
connectDatabase();
$menuquery = mysql_query("SELECT c_id, c_naam FROM categorie WHERE c_parent = '0'");
    while ($row = mysql_fetch_array($menuquery))
    {
        $c_id = $row["c_id"];
        $c_naam = $row["c_naam"];
        $c_parent = $row["c_parent"];
        echo "<a href='producten.php?cat=$c_id'>$c_naam<br>";
            if ($cat == "0")
            {
            }
            else 
            {
                $query2 = mysql_query("SELECT c_id, c_naam, c_parent FROM categorie WHERE c_parent = '$cat' "); // 5
                while ($row2 = mysql_fetch_array($query2)) 
                {
                        $c_id2 = $row2["c_id"];     // 11
                        $c_naam2 = $row2["c_naam"]; // test

                        if ($c_id == $cat)
                        {
                            echo "<a href='producten.php?cat=$c_id2'>- $c_naam2<br>";
                        }
                        else
                        {
                            echo "<a href='producten.php?cat=$c_id2'>- $c_naam2<br>";
                            $query3 = mysql_query("SELECT c_id, c_naam, c_parent FROM categorie WHERE c_id = '$c_id2'");
                            while ($row3 = mysql_fetch_array($query3))
                            {
                                $c_id3 = $row3["c_id"];
                                $c_naam3 = $row3["c_naam"];
                                $c_parent3 = $row3["c_parent"];
                                if ("a" == "b")
                                {
                                    echo "<a href='producten.php?cat=$c_id3'>-- $c_naam3<br>";
                                }
                            }
                        }               
                }
            }
    }
echo "</h3>";

}

表“Categorie”如下所示: C_ID c_naam c_parent

发生以下情况:

如果我没有设置$ cat或将$ cat设置为1或3,则菜单如下:

  • 第1项
  • 第2项
  • 第3项

如果我将$ cat设置为2(2以下有4和5),则菜单如下:

  • 第1项
  • 〜第4项
  • 〜第5项
  • 第2项
  • 〜第4项
  • 〜第5项
  • 第3项
  • 〜第4项
  • 〜第5项

如果我想在第4项下另一项,让我们说6和7,并将$ cat设为4,则菜单变为:

  • 第1项
  • 〜第6项
  • 〜第7项
  • 第2项
  • 〜第6项
  • 〜第7项
  • 第3项
  • 〜第6项
  • 〜第7项

我能做些什么才能让它成功:

  • 第1项
  • 第2项
  • 〜第4项
  • ~~第6项
  • ~~第7项
  • 〜第5项
  • 第3项

我希望我很清楚。

提前谢谢!

如果不可能,有人可以举个例子来说明如何获得已经合并过的菜单吗?

1 个答案:

答案 0 :(得分:0)

应该改变的一些事情:

  • if ($cat == "0" || $cat != $c_id) { } else { ...

如果循环中的当前类别不是给定的$ cat,则不希望显示子项(或者我相信你所说的)。因此,您应该将该检查添加到if子句中。

  • $query2 = mysql_query("SELECT c_id, c_naam, c_parent FROM categorie WHERE c_parent = '$c_id' ");

不要获取所选类别的子项,获取在循环中选择的类别的子项。此时,当您选择4时,您将在第二个查询而不是第三个查询中检索4的子项!

  • $query3 = mysql_query("SELECT c_id, c_naam, c_parent FROM categorie WHERE c_parent = '$c_id2'");

现在你只是再次获得同一类别而不是它的孩子。

至于一般性评论,您可能希望以递归方式重写它,因此您不限于某个嵌套深度。