Entwicklung einer Downloaddatenbank, Probleme mit Kategorien

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

  • #31
    1. du fragst immer noch auf gleichheit mit einem falschen parameter ab.

    2. die anzahl der leerzeichen ist direkt proportional zu $tiefe. bei dir ist sie konstant - das ist falsch.

    3. wo steht denn bitte dein else? das einrücken solltest du besser machen. aber eigentlich brauchst du kein else in diesem fall.

    4. du willst doch den kategorienamen ausgegeben haben? was machst du stattdessen? warum ist da kein zeilenumbruch o.ä. dahinter?

    Kommentar


    • #32
      Okay, also dürfte es ja dann nur noch der andere eigentlich auch logischere Wert sein:

      PHP-Code:
      function output($cat_arr$pid$tiefe)
      {
          foreach (
      $cat_arr as $value)
          {
              
      print_r($value);
              if (
      $value["pid"] == $pid)
              {
              for (
      $leer == $tiefe$leer 1$leer++)
              {
                  print 
      " ";
               } 
              print 
      $value.'<br>;
          }
          else
          {
              print $value;
        }

      Wie gehts jetzt weiter?

      Kommentar


      • #33
        Wie gehts jetzt weiter?
        du liest noch mal frage 3 und 4 vollständig.

        zu 2: http://de2.php.net/manual/en/control-structures.for.php musst du lesen.

        Kommentar


        • #34
          for ($leer == $tiefe, $leer = 1; $leer++)

          Was soll'n das werden?
          EDIT:
          den Syntaxfehler 3 Zeilen später kompensiert es jedenfalls nicht
          Zuletzt geändert von onemorenerd; 30.12.2006, 23:15.

          Kommentar


          • #35
            Sorry, bin schon ganz quer im Kopf. Denke so ist die for-Schleife richtig:

            PHP-Code:
            function output($cat_arr$pid$tiefe)
            {
                foreach (
            $cat_arr as $value)
                {
                    
            print_r($value);
                    if (
            $value["pid"] == $pid)
                    {
                    for (
            $leer 1$leer == $tiefe$leer++)
                    {
                        print 
            " ";
                    } 
                   print 
            $value["kategorie"].'<br>;
                }

            Sorry, vom vielen Hin- und Herkopieren ist mir das else verrutscht. Bin ich jetzt auf dem richtigen Weg?

            Muss doch dann noch die Funktion aufrufen und den Wert $pid und $tiefe mitgeben. Wie und woch mache ich das?

            Gibt es für das ganze nicht eine einfachere Lösung?

            Was hat es mit dem Tag <pre> auf sich?

            Kommentar


            • #36
              das sieht doch schon besser aus, wenngleich die abbruchbedingung für die for-schleife falsch ist. es wird nur iteriert, wenn der wert true ist.

              du beginnst mit 1 und tiefe ist (z.b.) 9. also wird die schleife kein einziges mal ausgeführt.

              was du brauchst, ist "kleiner/gleich".


              des weiteren stimmen die anführtungszeichen und geschweifte klammern nicht. korrigiere es.


              Muss doch dann noch die Funktion aufrufen und den Wert $pid und $tiefe mitgeben. Wie und woch mache ich das?
              genau wie im pseudo-code beschrieben.
              Was hat es mit dem Tag <pre> auf sich?

              Kommentar


              • #37
                Da fehlt immer noch ein ', das dürfte dir mit Parse Error um die Ohren gehauen werden.

                Ob der Code richtig ist, kann ich nicht sagen. Hab nicht gelesen, was du eigentlich machen willst. Erzählst du es nochmal oder wartest du, bis ich alles gelesen habe?

                Kommentar


                • #38
                  PHP-Code:
                  function output($cat_arr$pid$tiefe)
                  {
                      foreach (
                  $cat_arr as $value)
                      {
                          
                  print_r($value);
                          if (
                  $value["pid"] == $pid)
                          {
                          for (
                  $leer 1$leer <= $tiefe$leer++)
                          {
                              print 
                  " ";
                          } 
                         print 
                  $value["kategorie"].'<br>';
                       }
                     }

                  Okay, soweit müsste die Funktion nun richtig sein.

                  @onemorenerd: Eigentlich habe ich vor, ein Pulldown mit Kategorien zu befüllen. Allerdings gibt es auch Unterkategorien, die unterhalb der Oberkategrorien eingerückt ausgegeben werden sollen. penizillin lässt mich ganz schön zappeln, aber wenn das Endergebnis stimmt, dann hat es auch etwas gebracht.

                  Werde das komplette Script, wenn es fertig ist, hier dann nochmal posten.

                  @penizillin:So sollte doch dann das Script aussehen, oder? Habe es noch nicht getestet. Wollte erstmal nachfragen, ob okay.

                  PHP-Code:
                      $arr_count 0;
                      
                  $cat_arr = array();
                      
                      
                  $sql "SELECT * FROM kategorien ORDER BY id, pid;";
                      
                  $result mysql_query($sql) or die(mysql_error());
                      while (
                  $row mysql_fetch_array($resultMYSQL_ASSOC))
                      {
                      
                         
                  $id $row["id"];
                         
                  $pid $row["pid"];
                         
                  $kategorie $row["kategorie"];
                      
                         
                  $cat_arr[$arr_count] = array();
                         
                  $cat_arr[$arr_count]['id'] = $id;
                         
                  $cat_arr[$arr_count]['pid'] = $pid;
                         
                  $cat_arr[$arr_count]['kategorie'] = $kategorie;
                      
                         
                  $arr_count $arr_count 1;
                         
                  output($cat_arr,$pid,$tiefe+1);
                      
                      }
                  }

                      
                  function 
                  output($cat_arr$pid$tiefe)
                  {
                      foreach (
                  $cat_arr as $value)
                      {
                          
                  print_r($value);
                          if (
                  $value["pid"] == $pid)
                          {
                          for (
                  $leer 1$leer <= $tiefe$leer++)
                          {
                              print 
                  " ";
                          } 
                         print 
                  $value["kategorie"].'<br>';
                       }
                     }

                  Du hattest auch noch einen Inital-Aufruf angegegeben. Wo muss ich den denn dann aufrufen? Wenn ich ihn über die while-Schleife setzet habe ich ja noch kein $cat_arr.

                  Kommentar


                  • #39
                    Habe das Script gerade mal aufgerufen. Bekomme folgende Ausgabe:

                    Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) STAMM
                    Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) Handbücher
                    Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) Handbücher
                    Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) Demo-Versionen
                    Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) GDATA
                    Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) GDATA
                    Array ( [id] => 5 [pid] => 3 [kategorie] => Microsoft ) Microsoft
                    Array ( [id] => 1 [pid] => 0 [kategorie] => STAMM ) Array ( [id] => 2 [pid] => 1 [kategorie] => Handbücher ) Array ( [id] => 3 [pid] => 1 [kategorie] => Demo-Versionen ) Array ( [id] => 4 [pid] => 3 [kategorie] => GDATA ) Array ( [id] => 5 [pid] => 3 [kategorie] => Microsoft ) Array ( [id] => 6 [pid] => 2 [kategorie] => PDF ) PDF

                    So kann das ja auch nicht richtig sein.

                    Kommentar


                    • #40
                      Wenn ich ihn über die while-Schleife setzet habe ich ja noch kein $cat_arr.
                      drüber ist zu früh. drin ist sinnlos. was bleibt denn da noch übrig?

                      übrigens sind die parameter für den initialaufruf konstant, s. pseudocode.

                      und print_r kannst du rausnehmen.

                      Kommentar


                      • #41
                        Okay, hiermit sieht es schon besser aus:

                        PHP-Code:
                            $arr_count 0;
                            
                        $cat_arr = array();
                            
                            
                        $sql "SELECT * FROM kategorien ORDER BY id, pid;";
                            
                        $result mysql_query($sql) or die(mysql_error());
                            while (
                        $row mysql_fetch_array($resultMYSQL_ASSOC))
                            {
                            
                               
                        $id $row["id"];
                               
                        $pid $row["pid"];
                               
                        $kategorie $row["kategorie"];
                            
                               
                        $cat_arr[$arr_count] = array();
                               
                        $cat_arr[$arr_count]['id'] = $id;
                               
                        $cat_arr[$arr_count]['pid'] = $pid;
                               
                        $cat_arr[$arr_count]['kategorie'] = $kategorie;
                            
                               
                        $arr_count $arr_count 1;
                               
                        output($cat_arr,$pid,$tiefe+1);
                            
                            }
                            
                            
                        output($cat_arr,0,0);
                            
                        }

                            
                        function 
                        output($cat_arr$pid$tiefe)
                        {
                            foreach (
                        $cat_arr as $value)
                            {
                                if (
                        $value["pid"] == $pid)
                                {
                                for (
                        $leer 1$leer <= $tiefe$leer++)
                                {
                                    print 
                        " ";
                                } 
                               print 
                        $value["kategorie"].'<br>';
                            }
                          }

                        Die letzte geschweifte Klammer über dem Funktions-Aufruf gehört noch zur Schließung der darübergehenden Funktion, deswegen da okay.

                        Die Ausgabe sieht nun wie folgt aus:

                        STAMM
                        Handbücher
                        Handbücher
                        Demo-Versionen
                        GDATA
                        GDATA
                        Microsoft
                        PDF
                        STAMM

                        Eigentlich müsste sie aber folgendermaßen aussehen. Irgendwas funktioneirt immer noch nicht:

                        STAMM
                        ---Handbücher
                        ------PDF
                        ---Demo-Versionen
                        ------GDATA
                        ------Microsoft

                        Kommentar


                        • #42
                          1. ich sehe immer noch output() in der while schleife.
                          2. dann ersetze dein leerzeichen durch das minus-zeichen.

                          Kommentar


                          • #43
                            Nein, die Bindestriche habe ich nur hingesetzt, um es zu verdeutlichen. Will das schon mit Leerzeichen haben. Es stimmt die Ausgabe einfach nicht. Handbücher habe ich z.B. nur einmal in der DB. hier die Daten meiner DB:

                            id pid kategorie beschreibung
                            1 0 STAMM Werden keine Downloads abgelegt
                            2 1 Handbücher
                            3 1 Demo-Versionen
                            4 3 GDATA GDATA Demoversionen
                            5 3 Microsoft Microsoft Demoversionen
                            6 2 PDF PDF-Handbücher

                            In deinem Pseudo-Code kam das output() aber auch in der while-Schleife vor, oder?

                            Der Aufruf müsste also folgendermaßen sein:
                            output($cat_arr,0,3)

                            Was muss denn noch an die Stelle der 0? Die PID, oder? Die muss doch dann auch noch irgendwo definiert werden oder hochggezählt werden.

                            Kommentar


                            • #44
                              Nein, die Bindestriche habe ich nur hingesetzt, um es zu verdeutlichen. Will das schon mit Leerzeichen haben. Es stimmt die Ausgabe einfach nicht.
                              im browser gibt es keine multiplen leerzeichen. dafür muss man dann "& nbsp ;" (ohne leerzeichen, als html-entity) nehmen.

                              In deinem Pseudo-Code kam das output() aber auch in der while-Schleife vor, oder?
                              entschuldige - natürlich.

                              nur mit anderen parametern.
                              Was muss denn noch an die Stelle der 0? Die PID, oder?
                              für den ersten aufruf? da muss die root-id rein, die ist i.d.r. 0 (bei dir auch).

                              Kommentar


                              • #45
                                Ich denke, ich bin jetzt der Lösung schon ziemlich nahe. Der Code sieht nun folgendermaßen aus:

                                PHP-Code:
                                    $arr_count 0;
                                    
                                $cat_arr = array();
                                    
                                    
                                $sql "SELECT * FROM kategorien ORDER BY id, pid;";
                                    
                                $result mysql_query($sql) or die(mysql_error());
                                    while (
                                $row mysql_fetch_array($resultMYSQL_ASSOC))
                                    {
                                    
                                       
                                $id $row["id"];
                                       
                                $pid $row["pid"];
                                       
                                $kategorie $row["kategorie"];
                                    
                                       
                                $cat_arr[$arr_count] = array();
                                       
                                $cat_arr[$arr_count]['id'] = $id;
                                       
                                $cat_arr[$arr_count]['pid'] = $pid;
                                       
                                $cat_arr[$arr_count]['kategorie'] = $kategorie;
                                    
                                       
                                $arr_count $arr_count 1;
                                       
                                //output($cat_arr,$pid,$tiefe+1);
                                    
                                    
                                }
                                    
                                    
                                output($cat_arr,0,3);
                                    
                                }
                                    
                                function 
                                output($cat_arr$pid$tiefe)
                                {
                                    foreach (
                                $cat_arr as $value)
                                    {
                                        if (
                                $value["pid"] == $pid)
                                        {
                                        for (
                                $leer 1$leer <= $tiefe$leer++)
                                        {
                                            print 
                                " ";
                                        } 
                                       print 
                                $value["kategorie"].'<br>';
                                    }
                                  }

                                Nun kann ich über den output()-Aufruf steuern, welche Unterkategroien aufgerufen werden sollen. Nehme ich anstelle der 0 die 1, dann bekomme ich Handbücher und Demo-Versionen. Mit der 2 erhalte ich PDF und mit der 3, GDATA und Microsoft.

                                Nun müsste ich doch eigentlich nochmal eine while-Schleife mit den Werten Result der Mysql-Abfrage machen und darüber $pid in output() ansteuern, das ganze in ein <select> reinbasteln und vor der Ausgabe dieser Unterkategorien noch die Überkategorien in <optionen> packen, oder?

                                Fehlt noch was?

                                Kommentar

                                Lädt...
                                X