Kategorie mit beliebig vielen Unterkategorien!

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Mr.Clear, 1. August 2006 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 1. August 2006
    Hi Leute!

    Ich versuche gerade mir ein kleines Archiv zu erstellen,
    dieses braucht eben natürlich Kategorien und sogar Unterkategorien!
    Soweit so gut, nur ich will eben auch, dass ich unbegrenzt Unterkategorien machen kann.

    So nun das Problem:
    Eine ewig Schleife! Warum is mir klar... da ich die Funktion in die selbige Funktion eingesetzt habe.
    Aber wenn die IF-Abfrage in der Funktion ungültig wird, müsste doch diese Schleife unterbrochen werden, und ein Ende finden.... ???

    Hab alles versucht im PHP-Code zu erklären... dürfte evtl verständlich sein ^^
    Falls nicht fragt mich :]


    Mfg,
    jede Hilfe wird reichlich bedankt ;-)


    PHP:

    <?php
    # Zur DB connecten
    # include "db_connect.php"
    /// DB - Install ////////////////////////////
    //////////// Kategorien /////////////////////
    $table  'Kategorien' ;
    $sql  "CREATE TABLE IF NOT EXISTS `" $table  . "`
            (
                `ID` INT AUTO_INCREMENT PRIMARY KEY,
                `Name` TEXT,
                `Parent` INT
            ); "
    ;
    mysql_query ( $sql ) OR die( mysql_error ());
    /////////////////////////////////////////////
    /////////////////////////////////////////////
    ?>
    <h1>Archiv</h1>
    <table width="100%" border="0" cellspacing="5" cellpadding="0">
    <?php
    /// Funktion erstellen um herauszufinden, ob es noch Unterkategorien gibt,
    /// falls ja hinschreiben, dann checken ob es in diesen Unterkategorien
    /// nochmal Unter-unter-Kategorien gibt, 
    /// falls ja.......... usw....
    /// falls nein (irgendwann sollte es keine Unterkategorien geben außer DB is unendlich)
    /// schließen sich die Schleifen und fertig. 
    function  check_and_post ()
    {
        
    $parent  = ${ "row" . $i }[ 'ID' ];
        
    $i ++;
        ${
    "sql" . $i } =  "SELECT * FROM    Kategorien 
                    WHERE     Parent = '"
    $parent  . "'
                    ORDER BY ID ASC"
    ;
        ${
    "result" . $i } =  mysql_query (${ "sql" . $i }) OR die( mysql_error ());
        ${
    "row" . $i } =  mysql_fetch_assoc (${ "result" . $i });        
        if( ${
    "row" . $i } !=  false 
        { 
        
    ?>
            <tr>
                <td>
                    <table width="100%" border="0" cellspacing="0" cellpadding="0">
                    <?php
                    
    do { 
                    
    ?>
                        <tr>
                            <td width="15" align="right">
                                &nbsp;-
                            </td>
                            <td align="left">
                                <?php  echo ${ "row" . $i }[ 'Name' ];  ?>                        
                            </td>
                        </tr>
                        <?php
                        check_and_post
    ();
                        
    ?>
                    <?php
                    
    } while(${ "row" . $i } =  mysql_fetch_assoc (${ "result" . $i }));
                    
    ?> 
                    </table>
                </td>
            </tr>
        <?php
        
    }
        
    $i  $i  1 ;
    }
    /// Start ////
    $i  0
    ${
    "sql" . $i } =  "SELECT
                    ID,
                    Name,
                    Parent
             FROM
                    Kategorien 
            WHERE     Parent = 'false'
            ORDER BY
                    ID ASC"
    ;
    ${
    "result" . $i } =  mysql_query (${ "sql" . $i }) OR die( mysql_error ());
    ${
    "row" . $i } =  mysql_fetch_assoc (${ "result" . $i });
    do { 
        
    ?>        
        <tr>
            <td width="100%" align="left">
                <?php  echo ${ "row" . $i }[ 'Name' ];  ?>        
            </td>
          </tr>
        <?php
        check_and_post
    ();
        
    ?>
    <?php
        

    while(${
    "row" . $i } =  mysql_fetch_assoc (${ "result" . $i }));
    ?> 
    </table>



     
  2. 4. August 2006
    Könnt ihr mir nicht bei dieser kleinen
    rekursiven Funktion helfen?
    Für jeden weiterhelfende Antwort hagelts 10er *g*
     
  3. 4. August 2006
    Also, PHP Code werde ich dir nicht geben, sonst lernst du das nicht.^^

    Um das Archiv richtig anzeigen zu lassen, bruchst du zwei Funktionen:

    1. Eine Funktion, um die Hauptkategorien anzeigen zu lassen
    2. Eine Funktion, um bei den jeweiligen Hauptkategorien dann die Unterkategorien anzeigen zu lassen

    Am einfachsten ist es, wenn du zwei Spalten in der MySQL-Tabelle hast: Einmal die ID der Kategorie (Ob Haupt- oder Unterkategorie ist erstmal egal) und zum zweiten eine weitere Spalte, in der drin steht, zu welcher ID diese Kategorie gehört (dann wäre es dann eine Unterkategorie).

    Im Prinzip ist das also ganz einfach:

    Du machst eine Schleife (While- oder foreach-Schleifen werden dafür am häufigsten benutzt), die solange läuft, bis es keine Hauptkategorien mehr gibt (also in der Datenbank festgelegte Kategorien, die den Wert 0 oder NULL in der Spalte categorie_id (o.ä stehen haben).

    In dieser while-Schleife startest du dann eine neue Schleife (in der bestehenden Schleife würde ich dir allerdings von MySQL-Abfragen abraten, mach lieber vor der Shleife noch eine Abfrage, die alle Unterkategorien in ein Array speichert), die dann eben die dazugehörigen Kategorien für die Hauptkategorie wieder ausgibt.

    Das wars eigentlich und übrigens: Ich benutz lieber feste Variablen!

    ----------------------------------------------------

    Wenn du noch ein Schreit weiter gehen willst (Unterkategorie in der Unterkategorie usw.) würde ich dir OOP schon empfehlen, um das übersichtlich zu halten, aber dann wirds auch schon schwieriger. :tongue:

    ----------------------------------------------------

    Ich hoffe, ich konnte dir helfen!
     
  4. 4. August 2006
    Danke vielmals
    ICh glaub mit deinen Erklärungen schaff ichs ;-)
    10er haste natürlich bekommen!!
    I love u

    Mfg!
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.