2011-08-22 41 views
0

我遇到了以下問題,我有一個sidemenu並基於$ _GET ['貓']它必須顯示內容。帶SQL的PHP​​動態菜單

所以我打電話給我的函數: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

如果我設置$貓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

我希望我很清楚。

預先感謝您!

如果這是不可能的有人可以給我一個例子如何得到一個已經合作的菜單?

+0

[PHP/MySQL的 - 建立一個導航菜單層次結構]的可能重複(http://stackoverflow.com/questions/477793/php-mysql-building-a-nav-menu-hierarchy) – hakre

回答

0

應改變一些事情:

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

如果迴路當前類別不是給定$貓,你不想顯示子項(或者我相信你說的話)。所以你應該把這個檢查添加到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'");

現在你只需再次收到同樣的類別,而不是它的孩子。

至於一般的評論,你可能想要以遞歸的方式重寫這個,所以你不限於一定的嵌套深度。