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
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
To bych mohl zkusit. Dík
juriad_
Profil *
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
A jak by to mělo vypadat? Já už jsem se v tom ztratil.
Alphard
Profil
- 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;.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: