我遇到了以下问题,我有一个侧面菜单并基于$ _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,则菜单如下:
如果我将$ cat设置为2(2以下有4和5),则菜单如下:
如果我想在第4项下另一项,让我们说6和7,并将$ cat设为4,则菜单变为:
我能做些什么才能让它成功:
我希望我很清楚。
提前谢谢!
如果不可能,有人可以举个例子来说明如何获得已经合并过的菜单吗?
答案 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'");
现在你只是再次获得同一类别而不是它的孩子。
至于一般性评论,您可能希望以递归方式重写它,因此您不限于某个嵌套深度。