kostenloser Webspace werbefrei: lima-city


Menü mit PHP und MySQL einlesen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    karlja

    karlja hat kostenlosen Webspace.

    Hi, ich hab das schonmal in einem anderen Forum gepostet, aber keine Antworten bekommen... deswegen hier nochmal:


    Hallo,
    ich versuche ein Men? zu basteln, dass aus einer MySQL-Datenbank ausgelesen wird.
    Das Men? soll so aussehen:
    :: Home
    >> Hallo
    >> Ich
    >> Tag
    :: Portal
    >>
    >>
    >>
    >>
    :: Hilfe

    Das ist der Grundaufbau des Men?s. Die Ausgabe soweit bekomme ich auch hin, allerdings hapert es dabei, dass ich immer nur von dem Punkt eine Reihe Untermen?s angezeigt haben will, der auch gerade angezeigt ist. Bei jedem Wechsel der Seite wird also das Men? neuerstellt. Wenn also z.B. die Seite Hallo angezeigt wird, dann soll das Men? so aussehen:
    :: Home
    >> Hallo
    >> Ich
    :: Portal
    :: Hilfe

    Die jeweiligen Men?punkte stehen in einer DB und es wird jeweils in der Reihe \"submenu\" eingetragen, wovon ein Men? Untermen? ist bzw. wenn es einer der Hauptpunkte ist, dann ist dieser Wert \"nil\".
    Dies ganze steht in einer Funktion, die rekursiv durchlaufen wird. Hier ist der bisher von mir entworfene Code. Dabei hapert es aber dann, wenn ich zum Beispiel \"Hallo\" ausw?hle, dass dieser Men?punkt auch angezeigt wird.

    In der Funktion Menu wird die ganze ausgabe des Men?s durch den Aufruf gestartet
    menu($link,nil,nil,$_SESSION['intern'],0);


    Danach geht es in die Funktion Menu und diese durchl?uft sich selbst rekursiv...
    function menu($menu_link,$menu_page,$menu_submenu,$menu_intern,$menu_level) { 
       require ("prefix.inc.php"); 
       if ($menu_level == 0) { 
          $sql = "SELECT * FROM ".$prefix."navi WHERE `intern` <= '".$menu_intern."' AND `show` = 'true' AND `submenu` = '".addslashes($menu_submenu)."' ORDER BY link_id ASC"; 
          $res = mysql_query($sql) or error(__LINE__,__FILE__,"Zugriff auf die Datenbank fehlgeschlagen!",mysql_error()); 
          if (@mysql_num_rows($res)) { 
             while($data = mysql_fetch_assoc($res)) { 
                echo '<a href="index.php?link='.$data['page'].'" class="boxlink"><div width="100%"> :: '.$data['title'].'</div></a>'; 
                menu($menu_link,$data['page'],$data['submenu'],$menu_intern,1); 
             } 
          } 
       } elseif (istsubmenu($menu_page,$menu_link,$menu_submenu,$menu_intern) || $menu_link == $menu_page) { 
          $sql = "SELECT * FROM ".$prefix."navi WHERE `intern` <= '".$menu_intern."' AND `show` = 'true' AND `submenu` = '".$menu_page."' ORDER BY link_id ASC"; 
          $res = mysql_query($sql) or error(__LINE__,__FILE__,"Zugriff auf die Datenbank fehlgeschlagen!",mysql_error()); 
          if (@mysql_num_rows($res)) { 
             while($data = mysql_fetch_assoc($res)) { 
                echo '<a href="index.php?link='.$data['page'].'" class="boxlink"><div width="100%">'.sub(($menu_level+1)*2,' ',' ').'&raquo; '.$data['title'].'</div></a>'; 
                menu($menu_link,$data['page'],$data['submenu'],$menu_intern,$menu_level+1); 
             } 
          } 
       } 
    }


    In der Funktion istsubmenu soll dann ?berpr?ft werden, ob der aktuell ge?ffnete Link in einem ein Submen? des als n?chstes anzuzeigenden Men?-Punktes ist und sollte dies so sein, soll ein \"true\" zur?ckgegeben werden und der anzuzeigende Men?-Punkt angezeigt werden.

    function istsubmenu($sub_page,$sub_link,$sub_menu,$sub_intern){ 
       require ("prefix.inc.php"); 
       if ($submenu == nil) { 
          $sub_sql = "SELECT * FROM ".$prefix."navi WHERE `intern` <= '".$sub_intern."' AND `show` = 'true' AND `page` = '".$sub_link."' ORDER BY link_id ASC"; 
          $sub_res = mysql_query($sub_sql) or error(__LINE__,__FILE__,"Zugriff auf die Datenbank fehlgeschlagen!",mysql_error()); 
          if (@mysql_num_rows($sub_res)) { 
             $sub_data = mysql_fetch_assoc($sub_res); 
             if ($sub_link = $sub_page) { 
                return true; 
             } else { 
                return istsubmenu($sub_data['submenu'],$sub_link,$sub_data['page'],$sub_intern); 
             } 
          } else { 
             return true; 
          } 
       } else { 
          return false; 
       } 
    }


    Auch noch wichtig ist diese Funktion, die f?r den Abstand des Men?punktes von dem linken Rand und dessen Einr?ckung zust?ndig ist.
    function sub($sub_level,$sub_sign,$sub_signfinal) { 
       if ($sub_level > 0) { 
          return $sub_signfinal = sub($sub_level-1,$sub_sign,sub_signfinal).$sub_sign; 
       } 
    }


    Ich hoffe hier kann mir jemand helfen. Ich hab schon nen ziemlichen Knoten im Kopf und komme bei dem Problem nicht weiter.

    Vielen Dank.
    cu
    Karlja
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c*********c

    $sql = \"SELECT * FROM \".$prefix.\"navi WHERE `intern` <= \'\".$menu_intern.\"\' AND `show` = \'true\' AND `submenu` = \'\".addslashes($menu_submenu).\"\' ORDER BY link_id ASC\";


    Du darfst das erste (sowie das letzte) Anf?hrungszeichen nicht escapen!

    ?ndere also alle Codezeilen, bei denen das der Fall ist, nach diesem Schema ab:



    $prefix .= "navi";

    $sql = "SELECT * FROM '$prefix' WHERE intern <= '$menu_intern' AND show = 'true' AND submenu = 'addslashes($menu_submenu)' ORDER BY link_id ASC";



  4. Autor dieses Themas

    karlja

    karlja hat kostenlosen Webspace.

    Das scheint von Lima beim Posten escaped worden zu sein.. ich hab daran nichts escaped gehabt...

    cu
    Karlja
  5. c*********c



    karlja schrieb:
    Das scheint von Lima beim Posten escaped worden zu sein.. ich hab daran nichts escaped gehabt...

    cu
    Karlja


    ah so....benutze in Zukunft besser den Quote-Tag...aufgrund der Darstellung....

    Dann h?tten wir hier noch ein Fehlerchen:


    if ($submenu == nil) {


    m?sste

    if ($submenu == "nil") {

    heissen
  6. Autor dieses Themas

    karlja

    karlja hat kostenlosen Webspace.

    auch mit '' oder "" funktioniert das noch nicht richtig.
    Jetzt sind auch die slashes weg.

    Danke.
    Karlja
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!