php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.06.2005, 16:11  
Gast
 
Beiträge: n/a
Standard Menü aus MySQL Datenbank ausgelesen

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
PHP-Code:
<? menu($link,nil,nil,$_SESSION['intern'],0); ?>
Danach geht es in die Funktion Menu und diese durchläuft sich selbst rekursiv...
PHP-Code:
<?
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 
'[url="index.php?link='.$data['page'].'"]<div width="100%">::'.$data['title'].'</div>[/url]';
                
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 
'[url="index.php?link='.$data['page'].'"]<div width="100%">'.sub(($menu_level+1)*2,'','').'&raquo;'.$data['title'].'</div>[/url]';
                
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.
PHP-Code:
<?
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.
PHP-Code:
<?
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
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 01.06.2005, 16:16  
Erfahrener Benutzer
 
Registriert seit: 14.05.2008
Beiträge: 183
netti befindet sich auf einem aufstrebenden Ast
Standard

hm...sag mal...weiso setzt du das nicht einfahc in eine php datei und includest die? Das ist doch einfacher als damit ne db zu belästigen
netti ist offline  
Alt 01.06.2005, 16:20  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von netswipe
hm...sag mal...weiso setzt du das nicht einfahc in eine php datei und includest die? Das ist doch einfacher als damit ne db zu belästigen
Das ganze soll editierbar und außerdem auch noch für unterschiedliche Benutzergruppen sein.
 
Alt 01.06.2005, 23:17  
Erfahrener Benutzer
 
Benutzerbild von Alpha Centauri
 
Registriert seit: 05.02.2005
Beiträge: 278
Alpha Centauri
Standard

ich hab sowas schon in der praxis laufen.

ich hab es nach dem gruppenprinzip aufgebaut

z.b. id's

1 => home
1_1 => kapitel1
1_1_1 => teil1
1_1_2 => teil1
1_2 => kapitel2

usw.
z.b. gehört dann zur gruppe 1_1 , auch 1_1_1 und 1_1_2 aber nicht 1_2 usw.
dass ist ein relativ einfaches prizip. so kannst du in der sql - abfragen nach 1_1% suchen und bekomms die zugehörigen untermenü's.
__________________
Alpha Centauri ist offline  
Alt 01.06.2005, 23:23  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

1) mal bitte <? und ?> um deinen code, dann funktioniert auch der highlighter
2) vieleicht mal ein stück leßbarer einrücken :P ?
3)
noch nebenbei:
select * from
Warum soll ich nicht SELECT * schreiben?
http://www.php-faq.de/q/q-sql-select.html
robo47 ist offline  
Alt 01.06.2005, 23:50  
Gast
 
Beiträge: n/a
Standard

ok, das mit <? und ?> hab ich gemacht... aber wie soll ich das lesbarer einrücken.. das ist jedesmal mit nem tab eingerückt.

aber das war alles nicht meine frage...
Danke.
cu
Karlja
 
Alt 01.06.2005, 23:54  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

z.b. so:

PHP-Code:
if (bedingung)
{
    while (
bedingung)
    {
        
code
    
}

weil sowas

}}}}

da verlier zumindest ich den überblick was wie wo welche klammer zu was gehlört :P
robo47 ist offline  
Alt 02.06.2005, 17:07  
Gast
 
Beiträge: n/a
Standard

Ok... also will bzw. kann mir hier niemand helfen.

Allgemein ist mir in diesem Forum sowieso aufgefallen, dass es hier ziemlich kleinkariert zugeht. Anstatt die Fragen der Leute zu beantworten, wird an Sachen wie der Schreibung und sonstigem rumgemeckert. Das hier ist das "Anfänger"-Forum!!!! Könnt mir ja gerne ein paar Tips geben, aber ich hab grad auch noch nach etwas anderem in diesem Forum gesucht und da wurde auch die ganze Zeit an der Schreibung gemeckert.
Wenn ihr nicht helfen wollt, dann lasst es. Aber meckert nicht an uns rum, weil wir noch nicht so erfahren in php sind!!!

Der Beitrag kann geschlossen werden. Ich frag in einem anderen Forum wegen meinem Problem nach.
Vielen Dank.
cu
Karlja
 
Alt 02.06.2005, 17:10  
Erfahrener Benutzer
 
Registriert seit: 25.02.2004
Beiträge: 1.524
Orolhawion
Standard

tschüssi!

es ist und bleibt ein entwicklerforum, und wenn entwickler nicht kleinkariert sind, dann machen die skripte nicht das, was sie sollen!
__________________
"die Mitte des Textes kann ja theor. mitten in einem Text liegen"

http://www.jagr.de/
Orolhawion ist offline  
Alt 02.06.2005, 17:11  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

weist du die leute die heir hlefen wollen sich auch nicht imemr durch schlecht leßbaren Code quälen und ein Post, dass du es bereinigt hast, wäre vileiecht angebracht gewesen ....

aber okay, wenn du nicht dir vorraussetzungen erfüllst um geholfen zu bekommen ....

mfg
robo47
robo47 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mit php dynamisch Namen von Bildnamen sowie Pfad in mysql Datenbank speichern mallmis PHP Tipps 2008 1 19.11.2007 23:04
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:33
[Erledigt] mysql datenbank anlegen...aber WIE??? PHP Tipps 2005-2 0 05.08.2005 19:33
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:32
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:32
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:31
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:31
mysql datei in datenbank einspielen Datenbanken 6 20.06.2005 16:07
Datenbank wird online nicht ausgelesen PHP Tipps 2005 7 27.05.2005 13:20
[Erledigt] Verständnisfrage OOP - Objekte in MySQL Datenbank schreiben? PHP Tipps 2005 2 19.05.2005 21:40
mit mysql und php eine datenbank erstellen? Großes Problem PHP Tipps 2004-2 1 16.12.2004 14:53
Auslesen von Daten aus einer mysql Datenbank + Editieren vampsoftchef PHP Tipps 2004-2 5 15.11.2004 08:31
bin ich blöd???? Mysql Datenbank Passwort becks123 Datenbanken 3 29.10.2004 14:11
[Erledigt] MySQL findet Datenbank nicht Datenbanken 10 21.10.2004 09:14
Formular in Mysql Datenbank speichern Anuschka Datenbanken 1 15.08.2004 02:55

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
untermenü php datenbank, php mysql menu, mysql menü, menü php mysql, menü mit mysql, php menu mysql, menu mysql, http://www.php.de/php-tipps-2005/24011-menue-aus-mysql-datenbank-ausgelesen.html, mysql menüs, menü aus mysql, mysql submenu, mysql menue, zend framework menü aus datenbank, php mysql menü untermenü, mysql in array menü, mysql menu mit untermenu erzeugen, menü mit join mysql, zend menu mysql, php mysql menu submenu, zend framework navigation aus datenbank

Alle Zeitangaben in WEZ +1. Es ist jetzt 15:47 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.