Rekursive Funktion: return NULL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Rekursive Funktion: return NULL

    Hallo liebe Community,

    irgendwie habe ich ein grundsätzliches Verständnisproblem mit der Rückgabe von rekursiven Funktionen.

    Was habe ich vor?
    - Baumstruktur von Kategorien in der Datenbank abgebildet (ID und Vater-ID)
    - Prüfe, ob Beschreibung vorhanden ist. Wenn nein, nimm die Beschreibung der nächsthöheren Seite
    - Prinzip: prüfe auf vorhandene Beschreibung, nimm alternativ die nächst höhere Beschreibung und wenn die vorhanden ist, brich die Rekusion ab.

    Die Abbruchbedingung funktioniert, aber die Rückgabe ist NULL. Gebe ich den Wert mit echo aus, wird der korrekte Wert ausgegeben.

    PHP-Code:
    function getCatDescriptionForProd($ref_id) {

        
    # Übergeordnete Kategorie auslesen
        
    $query "SELECT * FROM kategorie WHERE cat_id = '$ref_id' LIMIT 1";
        
    $result mysql_query($query);
        if (
    mysql_num_rows($result) > 0) {
            
            
    $row mysql_fetch_assoc($result);
            if (
    $row['beschreibung'] != '') {
                return 
    $row['beschreibung'];    // <-- Warum gibt er an dieser Stelle NULL aus?
            
    } else {
                
    getCatDescriptionForProd($row['ref_id']);
            }

        
    # Wenn kein Datensatz gefunden wird (bsp. bei Root-Seite)
        
    } else {
            return 
    FALSE;
        }



    Zuletzt geändert von schmidtsmikey; 19.02.2013, 12:54.

  • #2
    Hallo,

    habe erstmal ein paar grundsätzliche Hinweise:

    1. Verwende wenn möglich keinen "*" in Querys sondern hol dir genau das was du brauchst. In deinem Fall 'beschreibung' und 'ref_id'.
    2. Gib 'beschreibung' mal eine Zeile früher aus und schau was drin steht.
    3. Was für ein Format hat das Feld 'Beschreibung' in deiner Datenbank? "!= null" ist nicht das selbe wie "!= ''".
    4. Dein else-Zweig schaut mir nach einer bösen Falle aus. Geht er da rein, hast du womöglich eine Endlosschleife, denn die 'ref_id' die er beim aktuellen durchgang nicht gefunden hat, wird gleich nochmal geprüft.., und nochmal, und nochmal..

    Kommentar

    Lädt...
    X