Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit einer Funktion

Einklappen

Neue Werbung 2019

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

  • Probleme mit einer Funktion

    Brauch ma wieder etwas Hilfe, da ich anscheinend total auf dem Schlauch stehe.


    Und zwar habe ich eine Datenbank-Tabelle in der Kategorien gespeichert sind.

    Nun m�chte ich wenn ich auf eine Seite gehe, alle Kategorien die �ber der momentan ausgew�hlten liegen, durch eine Datenbankabfrage ermitteln, in ein Array schreiben und anschlie�end auch ausgeben lassen.


    Mein bisheriger Ansatz:

    PHP-Code:
     
    $cat_id
    =18;  
    $cat_name=check_sub_cats($cat_id);  
     
    function 
    check_sub_cats($cat_id)  
    {  
    $cat_name=array();  
     
    $sql="select cat_id,cat_parent_id,cat_name from shop_categories where cat_parent_id='$cat_id' ";  
    $res=mysql_query($sql);  
     
      while(
    $category=mysql_fetch_array($res))  
      {  
      
    $cat_name[]=$category['cat_name'];  
     
        if(
    mysql_num_rows($res)>0)  
        {  
        
    $cat_name=check_sub_cats($category['cat_id']);  
        }  
      }  



    Vielleicht ist jemand von euch so lieb und sagt mir wo die Fehler liegen.

  • #2
    Du must den Fehler schon nennen.
    Als Hinweis trotzdem: Deine rekursive Funktion gibt nichts zurück (void). Da macht die Zuweisung $cat_name = check_sub_cats($cat_id); keinen Sinn.

    Kommentar


    • #3
      Zitat von Zergling
      Du must den Fehler schon nennen.
      Als Hinweis trotzdem: Deine rekursive Funktion gibt nichts zurück (void). Da macht die Zuweisung $cat_name = check_sub_cats($cat_id); keinen Sinn.
      Danke erstmal für deine Antwort!

      Ich weiß, dass Sie nichts zurückgibt und genau da liegt ja das Problem an der ganzen Sache.
      Vielleicht kannst du mir ja sagen, wie ich die Funktion zum funktionieren bringe?

      Kommentar


      • #4
        http://www.php.net/manual/de/functions.php



        /edit:

        Zitat von ThaRider
        Vielleicht kannst du mir ja sagen, wie ich die Funktion zum funktionieren bringe?
        Wie definierst Du funktionieren? Was soll die Funktion machen, was sie nicht tut? Welche Fehlermeldung erhältst Du?

        Kommentar


        • #5
          Zitat von karl-150
          Wie definierst Du funktionieren? Was soll die Funktion machen, was sie nicht tut? Welche Fehlermeldung erhältst Du?
          Also, ich möchte anhand der aktuellen Kategorie-ID alle Namen der darüber liegenden Kategorien ermitteln und in ein Array schreiben, damit ich Sie dann ausgeben kann.

          Nehmen wir mal an, ich bin gerade in der Kategorie mit der ID 18, dann sollte mittels Datenbankabfrage ermittelt werden, ob eine weitere Kategorie überhalb der Kategorie 18 liegt ( anhand der Parent ID der Kategorie 18 ).
          Sollte über der soeben ermittelten Oberkategorie wiederrum eine weitere Kategorie liegen, soll die Funktion solange ausgeführt werden, bis keine weiteren Oberkategorien mehr vorhanden sind ( Parent ID = 0 ).

          Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.

          Kommentar


          • #6
            Hat denn niemand eine Idee?


            So sieht mein aktueller Code nun aus:

            PHP-Code:
            <?  
            function check_sub_cats($cat_id)  
            {  
            //$cat_name=array();  
             
            $sql="select cat_id,cat_parent_id,cat_name from shop_categories where cat_id='$cat_id' ";  
            $res=mysql_query($sql);  
             
              while($category=mysql_fetch_array($res))  
              {  
              $cat_name[]=$category['cat_name'];  
             
                $sql2="select cat_id,cat_parent_id,cat_name from shop_categories where cat_id='".$category['cat_parent_id']."' ";  
                $res2=mysql_query($sql2);  
                $cat2=mysql_fetch_array($res2);  
                if(mysql_num_rows($res2)>0)  
                {  
                check_sub_cats($cat2['cat_parent_id']);  
                }  
              }  
              return $cat_name;  
            }  
            ?>

            Kommentar


            • #7
              Hallo,

              du hast das Prinzip von Rekursion nicht verstanden. Du musst dir die Ergebnisse alle merken, das machst du mit einem

              Code:
              check_sub_cats(..)
              nicht. Du fängst den return-Wert nicht auf.

              Code:
               
              function getSubCats($cat_id, $categories)
              {
                $sql = "SELECT cat_parent_id, cat_name FROM shop_categories WHERE cat_id = '$cat_id' LIMIT 1";
                $res = mysql_query($sql);
                if (mysql_num_rows($res) == 1) {
                  $categories[] = $cur['cat_name'];
                  getSubCats($cur['cat_parent_id']);
                }
              }
              $categories = array(); // hier stehen gleich deine Kategorie-Namen drin
              getSubCats(6, &$categories);
              Irgendwie hat grad mein Kopf gestreikt, deshalb Lösung mit Referenz.

              Kommentar


              • #8
                Zitat von Zergling
                Hallo,

                du hast das Prinzip von Rekursion nicht verstanden. Du musst dir die Ergebnisse alle merken, das machst du mit einem

                Code:
                check_sub_cats(..)
                nicht. Du fängst den return-Wert nicht auf.

                Code:
                 
                function getSubCats($cat_id, $categories)
                {
                  $sql = "SELECT cat_parent_id, cat_name FROM shop_categories WHERE cat_id = '$cat_id' LIMIT 1";
                  $res = mysql_query($sql);
                  if (mysql_num_rows($res) == 1) {
                    $categories[] = $cur['cat_name'];
                    getSubCats($cur['cat_parent_id']);
                  }
                }
                $categories = array(); // hier stehen gleich deine Kategorie-Namen drin
                getSubCats(6, &$categories);
                Irgendwie hat grad mein Kopf gestreikt, deshalb Lösung mit Referenz.
                Danke für deine Hilfe!

                Wenn ich die Funktion aufrufe, erhalte ich jedoch folgende Fehlermeldung:
                Code:
                Warning: Missing argument 2 for getSubCats() in C:\Programme\xampp\htdocs\test.php on line 52

                Kommentar


                • #9
                  Und wie rufst du die Funktion auf?

                  Kommentar


                  • #10
                    Zitat von xabbuh
                    Und wie rufst du die Funktion auf?
                    mittels
                    PHP-Code:
                    <?
                    getSubCats(18, &$categories);
                    ?>

                    Hab's jetzt aber hinbekommen!

                    Code:
                    PHP-Code:
                    <?
                    function getSubCats($cat_id, $categories)
                    {
                      $sql = "SELECT cat_parent_id, cat_name FROM shop_categories WHERE cat_id = '$cat_id' LIMIT 1";
                      $res = mysql_query($sql);
                      $cur = mysql_fetch_array($res);
                      if (mysql_num_rows($res) == 1) {
                        $categories[] = $cur['cat_name'];
                        getSubCats($cur['cat_parent_id'], &$categories);
                      }
                    }
                    $categories = array(); // hier stehen gleich deine Kategorie-Namen drin
                    getSubCats(18, &$categories);
                    ?>
                    Nochmals DANKE für die Hilfe

                    Kommentar

                    Lädt...
                    X