Autor | Zpráva | ||
---|---|---|---|
jrw Profil |
Zdravím,
potřeboval bych vypsat položky menu které jsou uloženy v databázi, zkoušel jsem to touto funkcí ale vždycky se mi to kousne, nevite kde by mohla být chyba? Databáze vypadá takto: id int(11) Auto Increment p int(11) díky function navigace($rodic) { $result = mysql_query("select id, p from menu where p = $rodic"); $output = ''; if($result){ $output .= '<ul>'; while( $row = mysql_fetch_assoc($result) ) { $output .= '<li>' . $row['id'] . '</li>'; } $output .= '</ul>'; $rodic++; $output .= navigace($rodic); return $output; } else { return FALSE; } } echo navigace(0); |
||
Taps Profil |
#2 · Zasláno: 10. 12. 2014, 12:03:34
jrw:
možná by bylo vhodné dát nějaký horní limit pro $rodic. Tak ti totiž může jít do nekonečna a skript za zacykluje (tím pádem se stránka kousne) |
||
jrw Profil |
#3 · Zasláno: 10. 12. 2014, 13:42:58
To bych mohl zkusit. Dík
|
||
juriad_ Profil * |
#4 · Zasláno: 10. 12. 2014, 13:50:49
jrw:
Problem je v nekonecne rekurzi. Pokud dotaz nevrati zadny radek, jedna se porad o spravny vysledek, tedy $result nebude false. False oznacuje situaci, kdy samotny dotaz selze. |
||
jrw Profil |
#5 · Zasláno: 10. 12. 2014, 14:38:32
A jak by to mělo vypadat? Já už jsem se v tom ztratil.
|
||
Alphard Profil |
#6 · Zasláno: 10. 12. 2014, 23:37:44
- Počet nalezených řádků zjistí funkce mysql_num_rows()
- Ale stejně to nedává smysl, vypsat všechny hlavní úrovně, naslepo inkrementovat $rodic a pak volat rekurzi je úplně mimo. Pro vypsání stromu by dávalo smysl dohledávat děti k aktuální položce $row['id'] . Viz interval.cz/clanky/metody-ukladani-stromovych-dat-v-relacnich-databazich.
- A poslední poznámka. Teď je to sice váš nejmenší problém, ale nevracel bych false, tady to dává větší smysl prázdný řetězec. Ta else větev a podmíněné returny se mi tam taky nezdají, nechal bych $output = ''; , potom jenom if větev a return $output; .
|
||
Časová prodleva: 9 let
|
0