Динамическое меню PHP с SQL - PullRequest
       0

Динамическое меню PHP с SQL

0 голосов
/ 22 августа 2011

У меня следующая проблема, у меня есть боковое меню, и на основе $ _GET ['cat'] должно отображаться содержимое.

Итак, я назвал свою функцию: функция 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>";

}

Таблица "Категория" выглядит следующим образом: c_id c_naam c_parent

Происходят следующие вещи:

Если я не установлю $ cat или не установлю $ cat в 1 или 3, меню будет таким:

  • Item 1
  • Item 2
  • Item 3

Если я установлю $ cat в 2 (под 2 есть 4 и 5), меню будет выглядеть так:

  • Item 1
  • ~ Item 4
  • ~ Item 5
  • Item 2
  • ~ Item 4
  • ~ Item 5
  • Item 3
  • ~ Item 4
  • ~ Item 5

Если я хочу по пункту 4 другой элемент, скажем, 6 и 7, и я установил $ cat в 4меню становится:

  • Элемент 1
  • ~ Элемент 6
  • ~ Элемент 7
  • Элемент 2
  • ~ Элемент6
  • ~ Item 7
  • Item 3
  • ~ Item 6
  • ~ Item 7

Что я могу сделать длязаставить его работать так, чтобы он стал:

  • Item 1
  • Item 2
  • ~ Item 4
  • ~~ Item 6
  • ~~ Item 7
  • ~ Item 5
  • Item 3

Надеюсь, мне ясно.

Заранее спасибо!

Если это невозможно, может кто-нибудь привести пример, как получить меню, которое уже свернуто?

1 Ответ

0 голосов
/ 22 августа 2011

Некоторые вещи, которые следует изменить:

  • 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'");

Прямо сейчас вы просто снова получаете ту же категорию вместо детей.

Что касается общего замечания, вы можете переписать его рекурсивным способом, чтобы не ограничиваться определенной глубиной вложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...