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

  • Gast-Avatar
    Ein Gast erstellte das Thema Probleme mit while.

    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*)?

  • Gast-Avatar
    Ein Gast antwortete
    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;
    }

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    sorry, mein fehler, hab den mysql_query falsch getippt; habs oben berichtigt

    Einen Kommentar schreiben:


  • Hakima
    antwortet
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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?

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Neimand, der mir helfen kann?

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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Wollte nur ne Antwort auf meine Frage...

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    nein,forum, aber wieso unvorteilhaft?

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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:

Lädt...
X