Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Menu z mysql
Forum PHP.pl > Forum > Przedszkole
nikestylex7
Witam. Stworzyłem menu drzewiaste i skorzystałem ze skryptu z kurs html co do skryptu działał dopuki nie wstawiłem skryptu php który swoim działaniem powoduje że podmenu są już otwarte nawet na nie nie klikając.

  1. <?php
  2. function display_children($parent, $level) {
  3. $result = mysql_query("SELECT a.id, a.label, a.link, Deriv1.Count FROM `menu` a LEFT OUTER JOIN (SELECT parent, COUNT(*) AS Count FROM `menu` GROUP BY parent) Deriv1 ON a.id = Deriv1.parent WHERE a.parent=" . $parent);
  4. while ($row = mysql_fetch_assoc($result)) {
  5. if ($row['Count'] > 0) {
  6. echo "<ul><li><a href='" . $row['link'] . "'>" . $row['label'] . "</a>";
  7. display_children($row['id'], $level + 1);
  8. echo "</li></ul>";
  9. } elseif ($row['Count']==0) {
  10. echo "<li><a href='" . $row['link'] . "'>" . $row['label'] . "</a></li>";
  11. } else;
  12. }
  13. }
  14. ?>
  15. <ul id="tree0" class="tree">
  16. <?php
  17. display_children(0, 1);
  18. ?>


tabela sql

id
label
link
parent
sort

1
Home
#home
0
0

2
Code
#code
0
0

3
Contract
#contract
0
0

4
PHP
#php
2
0

5
CSS
#css
2
0

6
Scripts
#scripts
4
0

7
Help
#help
4
0

8
Archive
#archive
6
0

9
Snippet
#snippet
8
0


Nie wiem co może być nie tak być może jakoś źle ze znacznikami ul li

Prawidłowo powinno pokazać to tak

  1. <ul id="tree0" class="tree">
  2. <li><a>Home</a></li>
  3. <li><a>Code</a>
  4. <ul>
  5. <li><a>PHP</a>
  6. <ul>
  7. <li><a>Scripts</a>
  8. <ul>
  9. <li><a>Archive</a></li>
  10. <li><a>Snippet</a></li>
  11. </ul>
  12. </li>
  13. </ul>
  14. </li>
  15. <li><a>Help</a></li>
  16. </ul>
  17. </li>
  18. <li><a>CSS</a></li>
  19. <li><a>Contract</a></li>
  20. </ul>
  21. </li>
  22. </ul>
maniana
Trochę posprzątane, o ile zapytanie SQL zwraca poprawne wyniki, powinno działać na 99%
  1. function display_children($parent) {
  2. $result = mysql_query("SELECT a.id, a.label, a.link, Deriv1.Count FROM `menu` a LEFT OUTER JOIN (SELECT parent, COUNT(*) AS Count FROM `menu` GROUP BY parent) Deriv1 ON a.id = Deriv1.parent WHERE a.parent=" . $parent);
  3. if(mysql_num_rows($result)>0){
  4. echo '<ul'.($parent==0?' id="tree0" class="tree"':'').'>';
  5. while($row = mysql_fetch_assoc($result)){
  6. echo '<li><a href="' . $row['link'] . '">' . $row['label'] . '</a>';
  7. if($row['Count']>0){
  8. display_children($row['id']);
  9. }
  10. echo '</li>';
  11. }
  12. echo '</ul>';
  13. }
  14. }
  15.  
  16. display_children(0);
nikestylex7
Twój skrypt działa lecz dalej jest otwarte nie wiem czy to wina tego że nie może być brane z bazy wtedy skrypt tego nie obsluguje czy co...

o to chodzi : http://www.kurshtml.edu.pl/skrypty/skrypt,...drzewiaste.html
nospor
W przeglądarce robisz: POKAZ Źródło strony i patrzysz sobie, czy twoj html z UL i LI jest wygenerowany tak jak powinienen.
nikestylex7

Podsumowując skrypt wypisuje to:

  1. <ul id="tree0" class="tree">
  2. <li><a href="index.php">Strona Główna</a></li>
  3. <li><a>Samochody</a>
  4. <ul>
  5. <li><a>Autobusy</a>
  6. <ul>
  7. <li><a>Miejskie</a>
  8. <ul>
  9. <li><a>AEC</a>
  10. <ul>
  11. <li><a>Q</a></li>
  12. <li><a>Regent III</a></li>
  13. <li><a>Regent V</a></li>
  14. <li><a>Routemaster</a></li>
  15. </ul>
  16. </li>
  17. </ul>
  18. </li>
  19. </ul>
  20. </li>
  21. </ul>
  22. </li>
  23. </ul>


jak zamiast używając bazy wkleje to w kod to już skrypt działa. Nie rozumiem dlaczego tak jest?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.