| 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: 12 let
|
|||
0