Menü mit PHP und SQL

Hallo zusammen,

ich möchte ein Menü in PHP erstellen,
das die Daten aus einer mySQL - Datenbank
ausliehst.
Das Funktioniert auch soweit schon.
Ich bekomme die Hauptüberschriften angezeigt.

Jetzt müsste ich nur noch wissen, wie ich
es hinbekomme, dass wenn ich auf einen
Hauptlink klicke das dann leicht versetzt
die unterlinks angezeigt werden.

Hoffe mir kann jemand helfen.

Gruß
TripleD

moin ich habs aehnlich…

ich habs so gemacht, wenn man aufm hauptlink klickt dann soll die seite menu.php?link=auf
sein… wart ich hau n bsp script rein…

if ($link1==„zu“) {
echo "+ link auf
";}
else {
echo "- link zu
";
echo "  - unterpunkt
";
}

verstehst das einiger maßen? also meine index behinhalt include(„mnue.php“) (menu halt…) und include("$seite") (die seite die beim link vorkommt…

kurz gesagt wenn man menu aufmacht bleibt die rechte seite erhaltn…bzw man kann se aendern je nach beelieben… man spricht sozusagen in JEDEM link der auffe seite intern is nur die index.php an… in der bei mir alles erklärt wird… *g* egal ob cookie setzen…mysql db auslesen…bzw erstellen falls se nich vorhanden is… etc. bin ne faule sau und ich sozusagen meine hp php files überall hochladen und nur mit mysql name und pw erstellt der datenbakn tabelle allein…is voll praktisch ;o)))

hoff mal hast verstanden wie ichs gemeint hab und deine frage is erklärt…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

*bahnhof* ^^
also ich versteh nicht so ganz wie Du das meinst, aber ich find es auch nicht so wirklich sauber gelöst irgendwie…

Ich würde an dieser Stelle mit rekursiven Funktionen arbeiten…
Die Oberpunkte bekommen Status 0, die anderen, die jeweilige (auto_increment) id des obereintrags…
also sähe die mysql DB in etwa so aus

id ueberschrift ref\_id link
1 schuhe 0 index.php?link=1
2 huete 0 index.php?link=2
3 hemden 0 index.php?link=3
4 blau 3 index.php?link=3&open=blau.php
5 gruen 3 index.php?link=1&open=gruen.php

so in etwa - dann wird erst mal auf ref_id=0 selektiert und bei jedem Aufruf gecheckt ob es einträge gibt, die die ref_id haben, die der id des gerade bearbeiteten Eintrages entsprechen. Je nachdem wie es beliebt kann man die dann immer anzeigen lassen oder eben nur wenn eine variable mitgeliefert wird… Das sollte ja nicht so schwer sein, oder?
Für das einrücken würde ich dann aber doch lieber die html-funktionen verwenden…

  1. und so zeugs siehe z.B. hier:
    http://edition-w3.de/TR/1999/REC-html401-19991224/st…

joah fein… aber da is doch gleich wieder mehr oder weniger mysql mit drinne…son peil hab ich nu au net…ich habs halt ohne eine db gemacht hmm… bzw. nee wart ma… meis is doch richtig…also…mmh naja is schwer zu beurteilen dafür muesstich mein hp source hinpacken und alles zu peiln…*fg*

naja hauptsache der der die frage gestellt hat peilt was wir mein *fg* und kann was gebrauchn ;o)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hrhr
jein - es sind schon mehr abfragen an mysql, aber hinsichtlich zukunftskompatibilität sollte man sich immer vorher Gedanken machen, bevor man dann alles wieder umstricken muss - rekursive Funktionen sind dabei richtig klasse, weil man nur einmal richtig intensiv nachdenken muss und wenn mans dann kapiert hat dann sieht man wie praktisch die Dinger sind :wink:
so in etwa läuft es dann im zeitlichen Ablauf:

  1. select alles was auf der ebene x steht (und sortiere es nach …) [ebene x
  2. Gib mir den ersten davon aus
  3. schau nach ob es dafür untereinträge gibt
    3a. gehe zu 1. und mache das gleiche für die Untereinträge (wenn was gefunden wurde)
  4. mach einfach weiter mit dem was Du bisher gemacht hast

Hallo MunichFreak,

ich hab mir schon mal ne DB angelegt.
Es sieht bei mir so aus:

id sid bez link
1 0 Maus ue_maus.php
2 0 Monitor ue_monitor.php
3 0 Grafikkarte ue_grafik.php
4 1 Cordles maus_cordles.php
5 1 Kabel maus_kabel.php
6 1 Optical maus_optical.php
7 2 CRT monitor_crt.php
8 2 TFT monitor_tft.php
9 3 Maxtor grafikkarte_maxtor.php
10 0 Scanner ue_scanner.php

Ich bekomme auch das mit den Hauptgruppen hin,
ich müsste nur noch wissen, wie ich
das mit dem Öffnen der Untergruppen hinbekomme.

Könntest du mir vieleicht noch
den Quelltext dafür irgendwie Posten???

Gruß
TripleD

mal ausm kopp
völlig ungetestet und daher wohl noch nicht so ganz richtig

<?php $dbname="tabellenname";<br />function me($id)
 {
 global $dbname, $PHP\_SELF, $clicked;
 $query=mysql\_query("SELECT \* FROM $dbname WHERE sid='$id'");
 while($row=mysql\_fetch\_array($query))
 {
 echo "
  • $row[bez]";
    if (isset($clicked) && $clicked=="$row[$id]")
    {
    echo "
    ";
    me($row[id]);
    echo „“;
    }
    }
    }

me(„0“); //erstaufruf
?>

Hallo,
hab jetzt mal deinen Code Kopiert,
da kommt bei mir folgende Meldung:

Parse error: parse error, unexpected T_FUNCTION in D:\Server\Apache2\htdocs\www\usr\admin\Online-Shop\powershop10\abfrage2.php on line 4

An was könnte das liegen???

Gruß
TripleD

Fehler gefunden, trotzdem Problem
Hi,

hab das Problem gefunden,
lag an nem vergessenen „;“. *g*

Hab aber immer noch ne Fehlermeldung:

Notice: Use of undefined constant id - assumed ‚id‘ in D:\Server\Apache2\htdocs\www\usr\admin\Online-Shop\powershop10\abfrage2.php on line 15

Weiß aber nicht an was das liegen könnte.
Hast du / jemand da eine Idee?

Hier der Quelltext:

**<?php include(‚zugang_loc.php‘);
$dbname=„artikel“;

function abfrage($id)
{
global $dbname, $PHP_SELF, $clicked;
$query=mysql_query(„SELECT * FROM $dbname WHERE sid=’$id’“);
while($row=mysql_fetch_array($query))
{
echo „- $row[bez]“;
if (isset($clicked) && $clicked=="$row[$id]")
{
echo "
";
abfrage($row[id]);
echo „“;
}
}
}
abfrage(„0“); //erstaufruf
?>**

TripleD

urgs ^^
ich als schlampiger programierer soll Dir DA helfen?? ^^

naja es liegt wohl am error reporting… evtl hilft es schon, wenn Du das „id“ in der betreffenden Zeile von ’ einkreist :wink:

Habs jetzt soweit alles.

Noch eine Frage, warum kommt bei mir, wenn ich auf Maus klicken so ca. 50 mal nur der erste eintrag von 3 in dieser Kategorie und bei den anderen funktioniert es problemlos?

Geht es auch noch irgendwie, dass das Menü offen bleibt, wenn ich auf nen Unterpunkt klicke?

TripleD

langsam wirds aber kompliziert…

<?php include('zugang_loc.php');<br />$dbname="artikel";

function abfrage($id)
{
global $dbname, $PHP\_SELF, $clicked;
$query=mysql\_query("SELECT \* FROM $dbname WHERE sid='$id'");
while($row=mysql\_fetch\_array($query))
{
echo "

$showthis = 0;
$query2=mysql_query(„SELECT id FROM $dbname WHERE sid=’$row[id]’“);
while($row2=mysql_fetch_array($query2))
{
if (isset($clicked) && $clicked=="$row[$id]") $showthis=1;
$ausgabe .= "
";
$ausgabe .= abfrage($row[id]);
$ausgabe .= echo „“;
}
if ($showthis == 1) echo $ausgabe;
$ausgabe = „“;
}
}
abfrage(„0“); //erstaufruf
?>

wobei ich mir fast sicher bin, dass da jetzt irgendwo ein Fehler drin ist - nur so von der Grundidee her - immer alles durchlaufen lassen - wenn ein unterpunkt angeklickt wurde wird der marker auf 1 gesetzt um diesen tree anzeigen zu lassen, ansonsten wird ohne ausgabe weitergemacht…
ka ob das jetzt alles richtig ist - bin zu faul mir das jetzt wieder auf „lesbar“ zu formatieren und erst recht um mir so ne Datenbank anzulegen ^^

Ich hab es jetzt so weit das es alles untereinander
Angezeigt wird,aber es werden
immer z. B. bei Gruppe 1 (besitzt 3 Unterpositionen)
folgndermaßen angezeigt.

Gruppe 1
Unterpos 1
Unterpos 2
Unterpos 3
Unterpos 1
Unterpos 2
Unterpos 3
Unterpos 1
Unterpos 2
Unterpos 3

An was kann das liegen??

TripleD

daran dass das echo an einer falschen Position ist
in der Klammer statt nach der Klammer z.B.

Wie meinst du das???
An welcher Stelle???

an der richtigen
das tolle an php ist dass man damit rumprobieren kann und es maximal den browser oder den Webserver abschmieren lässt, in der Regel aber auch nur die fehlerhaften Ausschnitte reklamiert.
Du solltest hier nicht erwarten, dass Dir jemand den code für Dein Problem gibt ohne dass Du selbst nachdenken musst… Für solche Fälle bieten sich JavaScript-Lösungen viel besser an, weil die leichter implementiert werden können…