tabelle rekursiv für menubaum auslesen

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

  • tabelle rekursiv für menubaum auslesen

    hallo zusammen,

    ich habe folgende tabelle für einen kleinen shop

    CREATE TABLE `kategorie` (
    `id` int(11) NOT NULL auto_increment,
    `tiefe` int(11) NOT NULL default '0',
    `zeiger` int(11) NOT NULL default '0',
    `anlagedatum` int(11) NOT NULL default '0',
    `aktiv` int(11) NOT NULL default '0',
    `beschreibung` varchar(100) NOT NULL default '',
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=8 ;

    INSERT INTO `kategorie` VALUES (1, 1, 0, 0, 1, 'Monitor');
    INSERT INTO `kategorie` VALUES (2, 1, 0, 0, 1, 'Gehäuse');
    INSERT INTO `kategorie` VALUES (3, 1, 0, 0, 1, 'Eingabegeräte');
    INSERT INTO `kategorie` VALUES (4, 2, 1, 0, 1, 'CRT');
    INSERT INTO `kategorie` VALUES (5, 2, 1, 0, 1, 'TFT');
    INSERT INTO `kategorie` VALUES (6, 1, 0, 0, 1, 'Tastatur');
    INSERT INTO `kategorie` VALUES (7, 2, 4, 0, 1, '17');

    die spalte tiefe ist die verschachtelungstiefe, die spalte zeiger zeigt auf kategorie.id

    mit folgendem codeschnipsel wollte ich nun ein menu stricken, das sich aus- und einklappt, aber es klappt nicht so, wie ich das will


    viellleicht kann mir hier einen die eingebung ins hirn nageln, wo mein denkfehler ist.

    vorab many thx

    megle

    PHP-Code:
    <?

    include "zentrale/head.php";
    ?>

    </head>

    <body class="show">
    Verlinkung<br><br><br>
    <a href="abfragen.php">Abfragen</a><br><br>


    <?
     
    $aktTiefe    = $_GET[aktTiefe];
    $aktId        = $_GET[id];

    if( !isset($aktTiefe) ){
        $aktTiefe = 1;
    }

    function unterKategorie(){
        global $MySql_kategorie , $aktId , $aktTiefe;
        $neueTiefe = func_get_arg(0);
        $neueId = func_get_arg(1);
        
        if ( $aktTiefe == $neueTiefe && $aktId == $neueId ) {
            echo "abfrage<br><br>";
            $sqlbefehlunter  = "SELECT * FROM $MySql_kategorie ";
            $sqlbefehlunter    .= "WHERE zeiger = $neueId ";
            $sqlbefehlunter    .= "AND tiefe = $neueTiefe ";
            $abfrageunter    = mysql_query($sqlbefehlunter);
            $anzahlunter    = mysql_num_rows($abfrageunter);

            for( $x = 0 ; $x < $anzahlunter ; $x++ ){
                $idunter            = mysql_result( $abfrageunter , $x, "id");
                $naechsteTiefe        = mysql_result( $abfrageunter , $x, "tiefe");
                $naechsteTiefe++;
                $zeigerunter        = mysql_result( $abfrageunter , $x, "zeiger");
                $beschreibungunter    = mysql_result( $abfrageunter , $x, "beschreibung");
                
                $leerraum        = "";
                for( $l = 0 ; $l < $naechsteTiefe ; $l++ ){
                    $leerraum        = "&nbsp;&nbsp;&nbsp;";
                }
        
                print "$leerraum<a href='abfragen.php?id=" . $idunter . "&aktTiefe=" . $naechsteTiefe . "'>" . $beschreibungunter . "</a><br><br>\n\n";
                
                unterKategorie( $naechsteTiefe , $idunter );
                echo "aufruf " . $naechsteTiefe  . "<br><br>";
                
            }
        }

    }

    $sqlbefehl     = "SELECT * FROM $MySql_kategorie ";
    $sqlbefehl    .= "WHERE tiefe = 1 ";
    $sqlbefehl    .= "ORDER BY beschreibung ASC ";
    $abfrage    = mysql_query($sqlbefehl);
    $anzahl        = mysql_num_rows($abfrage);

    for( $i = 0 ; $i < $anzahl ; $i++ ){
        $id                = mysql_result( $abfrage , $i, "id");
        $naechsteTiefe    = mysql_result( $abfrage , $i, "tiefe");
        $naechsteTiefe++;
        $zeiger            = mysql_result( $abfrage , $i, "zeiger");
        $beschreibung    = mysql_result( $abfrage , $i, "beschreibung");

        $leerraum        = "";
        for( $l = 0 ; $l < $tiefe ; $l++ ){
            $leerraum        = "&nbsp;&nbsp;&nbsp;";
        }
        
        print "$leerraum<a href='abfragen.php?id=" . $id . "&aktTiefe=" . $naechsteTiefe . "'>" . $beschreibung . "</a><br><br>\n\n";

        unterKategorie( $naechsteTiefe , $id );
        echo "aufruf " . $naechsteTiefe  . "<br><br>";

    }

    print "</body>\n";
    print "</html>\n";

    ?>

  • #2
    1.) Code umbrechen!!!

    2.) Wo ist der Fehler?
    tabelle rekursiv für menubaum auslesen
    3.) such mal nach menumenu

    Kommentar


    • #3
      wozu speicherst du tiefe mit ab ? ergibt sich doch allein aus der tatsache wieviele eltern der knoten hat ..
      und solltest du mal das menu neu"stricken" / anordnen sind die dir nur im weg
      mfg,
      [color=#0080c0]Coragon[/color]

      Kommentar

      Lädt...
      X