Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit while

Einklappen

Neue Werbung 2019

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

  • Probleme mit while

    Hi!

    Also, ich will am ende einen String ausgeben, der in Etwa so aussehen soll:

    |-- Forum1
    |-- Forum2
    |-- |-- Unterkat1_von_Forum2
    |-- |-- |-- Unterkat1_von_Unterkat1
    |-- Forum3

    usw

    In der DB hab ich die Werte folgendermaßen:

    ID, name, forum_id
    1 Forum1 0
    2 Forum2 0
    3 Unterkat1 2
    4 Unterkat1 3
    5 Forum3 0

    Aber wie bekomme ich nun den String (Ich verzweifel an den whiles *g*)?


  • #2
    hi,

    Code:
    $sql = mysql_query("SELECT * FROM $db_tabelle WHERE forum_id = '0'");
    while($row = mysql_fetch_array($sql)) {
    print '|-- '.$row[name];
    $q_unterkats = mysql_query("SELECT * FROM $db_tabelle WHERE forum_id = '$row[id]'");
    $anzahl_unterkats = mysql_num_rows($q_unterkats);
    if($anzahl_unterkats > 0) {
    while($row2 = mysql_fetch_array($q_unterkats)) {
    print '|-- |-- '.$row[name];
    } } }
    ein kleiner denkanstoß. musst immer mehr verschachteln. bei meiner variante ist der 'Unterkat1_von_Unterkat1' nicht integriert. musst halt selber machen.

    mfg
    DarkManX

    Kommentar


    • #3
      vielen dank

      Aber wie gehts weiter?
      Er muss ja für jede weitere Verschachtlung ein weitres "|--" anhängen, dann wieder nach unterforen suchen, die dann mit der entsprechenden Anzahl von "|--" ausgeben und so weiter und so weiter.
      eine Art Stammbaum sozusagen.

      Kommentar


      • #4
        also falls du ein forum oder so machen willst, dann ist deine sql-tabellen struktur nicht von vorteil... da würde ich schon mal ganz anders anfangen!
        oder soll das eine navigation werden?

        mfg
        DarkManX

        Kommentar


        • #5
          nein,forum, aber wieso unvorteilhaft?

          //edit: achso, das wird dann sowas, wie "Gehe-zu" (<options>), jedenfalls schonmal die Namen dazu

          Kommentar


          • #6
            wie war es nochmal? ich glaub ein forum macht man mit 3 tabellen.

            1. themen
            2. topics
            3. threads

            so musst du es machen und dann hast du auch nicht dieses problem mit der verschachtelung. man muss dann trotzdem verschachteln, aber dann nicht soo extrem.
            am besten ist natürlich du lädst dir einfach nen forum runter...

            mfg
            DarkManX

            Kommentar


            • #7
              Wollte nur ne Antwort auf meine Frage...

              Kommentar


              • #8
                Zitat von DaRkX
                nein,forum, aber wieso unvorteilhaft?
                wieso???!!! gegenfrage: wieso schreiben menschen auf der tastatur mit händen, anstatt die füße zu nehmen?

                mfg
                DarkManX

                Kommentar


                • #9
                  Du kennst das Forum nicht, die Struktur nicht, aber kannst behaupten, es sei "nicht vorteilhaft";
                  Wie ich Code bleibt mir überlassen, es muss am Ende nur funktionieren.

                  Und wenn ich lieber mit den Füßen schreibe, dann ist das meine Sache.

                  ps: wenn ich die Unterkats in eine eigene Tabelle packe, hab ich immer noch das gleiche problem, nur, dass ich eine weitere Tabelle ansprechen muss

                  Kommentar


                  • #10
                    Neimand, der mir helfen kann?

                    sonst schlag(t) eine bessere Lösung vor!

                    Kommentar


                    • #11
                      Fertige Lösungen wird Dir hier niemand geben. Hast Du schon ein Stück Code...

                      Kommentar


                      • #12
                        Ok, bin nun verdammt nah dran, hab mich für eine rekursiv (?)-Lösung entschieden, die bis auf eine Stelle auch ganz gut funktioniert:

                        Code:
                        function make_goto_names($fid=0,$str="|-- ")
                        {
                        $res=mysql_query(" SELECT * FROM forums WHERE forum_id=\"$fid\" ") or die(mysql_error());
                        while ($row=mysql_fetch_array($res))
                        {
                        print $str.$row['name']."
                        ";
                        $fid=$row['id'];
                        $str = $str." |-- ";
                        make_goto_names($fid,$str);
                        $str = substr($str,0,3);
                        }
                        }
                        gibt mir das ganze auch fast perfekt aus, allerdings leider so:

                        |-- Forum1
                        |-- |-- Test 5
                        |-- |-- |-- Test 6
                        |-- Forum2
                        |-- |-- Test
                        |-- |-- |-- Test 2
                        |-- Test 3 <-- da ists falsch (fehlt ein "|-- ")
                        |-- Forum3
                        |-- |-- Test 4

                        Was hab ich falsch gemacht?

                        Kommentar


                        • #13
                          Hallo,

                          $fid=$row['id'];
                          ich schätze mal, der Fehler liegt in dieser Zeile. Kann das sein? Du vergleichst ja hier die fid mit der Zeilen-ID Sind diese gleich, so hängt er noch er 2x |-- an den string statt 1x |-- auszugeben (beim nächsten Durchlauf), ist das richtig, oder verstehe ich das falsch?

                          Mir ist aufgefallen, daß der eigentliche Funktionsaufruf nach der Ausgabe erfolgt

                          Kommentar


                          • #14
                            sorry, mein fehler, hab den mysql_query falsch getippt; habs oben berichtigt

                            Kommentar


                            • #15
                              Lösung:

                              Code:
                              function make_goto_names($fid=0,$ebene=0)
                              {
                              static $array;
                              
                              $ebene++;
                              
                              $res=mysql_query(" SELECT * FROM forums WHERE forum_id=\"$fid\" ORDER by id,forum_id") or die(mysql_error());
                              while ($row=mysql_fetch_array($res))
                              {
                              for ($i=0;$i<$ebene-1;$i++) $str=$str."|"; $str = $str."|--";
                              $array[]=$str.$row['name'];
                              unset($str);
                              $fid=$row['id'];
                              make_goto_names($fid,$ebene);
                              }
                              return $array;
                              }

                              Kommentar

                              Lädt...
                              X