Drop-Down Auswahl mit Kategorie und Unterkategorie

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

  • Drop-Down Auswahl mit Kategorie und Unterkategorie

    Hallo PHP-Entwickler,

    ich habe die Suchfunktion benutzt! Leider nichts passendes gefunden.

    Nun zu meinem "hoffentlich kleinem" Problem. Ich habe in MySQL eine Tabelle der folgenden Art:
    Kategorien und Unterkategorien eines Fotoalbums der Tabelle 4images_categories

    cat_id //// cat_name //// cat_parent_id
    1 //// Michael //// 0
    2 //// Michaels 4. Geburtstag //// 1
    3 //// Apfelbaum //// 0
    4 //// Christkindelsmarkt //// 0
    5 //// Michaels 6. Geburtstag //// 1
    6 //// Michi //// 1
    7 //// Spielplatz 1 //// 1
    8 //// Spielplatz 2 //// 1
    9 //// Katzen //// 0
    10 //// July //// 9
    11 //// Tiger und Tilli //// 9
    12 //// Andere Katzen //// 9
    13 //// Urlaub //// 0

    Ich habe es nur deswegen vollständig aufgeführt, damit Ihr es mit der Homepage vergleichen könnt.
    Meine Testgallerie

    Nun möchte ich ein Drop-Down-Feld so erstellen, dass es folgende konstellation hat:

    MICHAEL
    -Michaels 4. Geburtstag
    -Michaels 6. Geburtstag
    -Michi
    -Spielplatz 1
    -Spielplatz 2
    APFELBAUM
    CHRISTKINDELSMARKT
    KATZEN
    -July
    -Tiger und Tilli
    -Andere Katzen
    URLAUB

    Also Überkategorieen habe ich mal GROSS geschrieben.

    Hier nun der PHP-Code
    PHP-Code:
    $row mysql_query("SELECT * FROM 4images_categories where cat_parent_id =0"); 
    $rowu mysql_query("SELECT * FROM 4images_categories Where cat_parent_id <>0"); 
    echo 
    "<select name=\"cat_id\">"
    echo 
    "<option value=\"0\">Bitte Kategorie auswaehlen</option>\n";
    echo 
    "<option value=\"0\">--------------------------</option>\n";


    while (
    $res mysql_fetch_array($row))
    {
    echo 
    "\n<option value=\"$res[cat_id]\"";
    echo 
    ">$res[cat_name]</option>\n";
        while (
    $resu mysql_fetch_array($rowu))
        {
        if (
    $resu[cat_parent_id]==$res[cat_id])
            {
            echo 
    "\n<option value=\"$resu[cat_id]\"";
            echo 
    ">--$resu[cat_name]</option>\n";
            }
        }
    }
    echo 
    "</select>"
    Das Problem ist nun, dass er die Unterkategorie nur hinter der ersten (also MICHAEL) Oberkategorie hängt. Im weiteren Dropdownfeld ignoriert er die Unterkategorien. Ich komm net auf den Logikfehler.

    Also für eventuelle Hilfe im vorraus scho mal recht herzlichen Dank.

    Gruß
    Goerni

  • #2
    is doch klar Du gehst im ersten schritt der ersten While schleife das komplette resultset deiner zweiten Abfrage durch danach steht der Zeiger des rs am ende. d.h. bereits beim zweiten schritt der ersten while wird die zweite while nichts mehr finden.


    ich würde der hauptkategorie als parent die eigene id geben alles in einer query abfragen dann sortieren, das is einfach...

    oder alles auf einmal abfragen in ein array packen das als index immer deine parent_id hat und als werte die unterkategoriene dann kannste das schon ausgeben lassen...

    oder ...
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Du hast mich drauf gebracht !!!

      Super, es geht viel einfacher, aber durch Dich bin ich erst draufgekommen:

      einfach die Abfrage mit in die while-Schleife schieben. Dann sieht das ganze so aus:
      PHP-Code:
      $row mysql_query("SELECT * FROM 4images_categories where cat_parent_id =0"); 
      //Diese Zeile hab ich nach unten verschoben
      //$rowu = mysql_query("SELECT * FROM 4images_categories Where cat_parent_id <>0"); 
      echo "<select name=\"cat_id\">"
      echo 
      "<option value=\"0\">Bitte Kategorie auswaehlen</option>\n";
      echo 
      "<option value=\"0\">--------------------------</option>\n";


      while (
      $res mysql_fetch_array($row))
      {
      echo 
      "\n<option value=\"$res[cat_id]\"";
      echo 
      ">$res[cat_name]</option>\n";
      //Hierher
      $rowu mysql_query("SELECT * FROM 4images_categories Where cat_parent_id <>0");
          while (
      $resu mysql_fetch_array($rowu))
          {
          if (
      $resu[cat_parent_id]==$res[cat_id])
              {
              echo 
      "\n<option value=\"$resu[cat_id]\"";
              echo 
      ">--$resu[cat_name]</option>\n";
              }
          }
      }
      echo 
      "</select>"
      ?> 

      Kommentar


      • #4
        naja is eher suboptimal da du die db ziemlich belastest aber is dein ding...
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          Soviel Besuch hab ich nicht auf meiner Page

          Aber sicher hast du recht, leider bin ich mit meinen Newbie-Kenntnissen noch nicht in der Lage deine Lösungsvorschläge in ein funktionierendes Skript umzusetzen.

          Das mit der cat_parent_id geht leider net ganz zu einfach umzustellen, und die zweite Lösung hab ich net kapiert, zumal ich ja noch unterscheiden müsste Unterkategorie mit dem "---" vorndran und Hauptkategorie ohne den "---".

          Wenn du mal viel Zeit und Lust hast, könntest du ja mal mein Script passend umschreiben und hier posten. Ich bin mir sicher, dass davon auch andere profitieren werden.

          Trotzdem nochmal vielen Dank!

          Kommentar


          • #6
            Wenn du mal viel Zeit und Lust hast, könntest du ja mal mein Script passend umschreiben und hier posten. Ich bin mir sicher, dass davon auch andere profitieren werden.
            kleiner Scherzkeks, wie?
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              Original geschrieben von MelloPie
              kleiner Scherzkeks, wie?
              na komm MelloPie zick nicht rum, ran an den Script und code

              Kommentar

              Lädt...
              X