Menu mit PHP und Mysql Ohne Java ?

grauercorsar

Grünschnabel
Hallo,

habe folgendes Problem, habe schon seit Stunden versucht ein annähernd einfaches Script zu finden, in dem ich den Quellcode für ein Baum-menu finden kann.

habe 2 Tabellen in einer Mysql Datenbank:

Tabelle Kategorie
mit den Feldern catid und parentid

In der catid sind die Kategorien dargestellt und in parentid die dazugehörigen Überkategorien. Jeweils mit zahlen zugeornet.

Bsp: catid 21 parentid 0
catid 22 parentid 0
catid 23 parentid 0
catid 24 parentid 21
catid 25 parentid 21
catid 26 parentid 25
catid 28 parentid 25
catid 29 parentid 21


usw.

Tabelle Beschreibung
mit den Felden categorieid und catname

In der categorieid sind die Kategorien dargestellt und in catname die dazugehörige Beschreibung. Jeweils mit zahlen zugeornet.

Bsp: catid 21 catname Laminat
catid 22 catname Parkett
catid 23 catname geölt
catid 24 catname lackiert
catid 25 catname Schiffsboden
catid 26 catname Buche

usw.

Wie kann ich jetzt nun die Tabellen auslesen und als Baummenu Ohne ein einziges Javascript darstellen?

es sollte so ungefär ausehen

zum Anfang

Laminat (9)
Parkett (10)

nach Auswahl 1

Laminat (9)
-- Buche (6)
Parkett (10)

nach Auswahl 2

Laminat (9)
-- Buche (6)
---- geölt (3)
----lackiert (3)
Parkett (10)

usw.

Wie kann ich das auslesen?

Besten Dank im Voraus

MfG
 
Hi,

im Prinzip ist das ganz einfach, zumindest wenn man die Logik einmal verstanden hat.

Auf deiner Startseite ließt du alle Kategorien aus, wenn nun jemand auf eine Kategorie klickt wird die Kategorie-ID im Link mit übergeben, anhand dieser ID ließt du auf der nächsten Seite aus, auf welchen Link geklickt wurde und welches Untermenü demzufolge geladen werden soll.
Verstanden?
Wenn nciht -> Fragen. ;)


byez
 
Such mal im PHP-Forum nach "parentid".
Das Thema wurde schon einige Male behandelt, vielleicht hilft Dir ja bereits einer der Threads.
Die Struktur in der Datenbank ist ja immer recht ähnlich.
In Deinem speziellen Fall sollte man nur noch mit einem JOIN die Beschreibungen hinzuziehen, um doppelte und dreifache Abfragen in der DB zu vermeiden.

Wenn Du das jedoch ohne Reload der Seite realisieren willst, was ich nach Deiner Problembeschreibung nicht ausschließen kann, wirst Du das alleine mit PHP nicht realisieren können.

Gruß hpvw
 
Hm was hast du den gegen einsatz von Java? Mit nem JTree is es doch super praktisch da ein Applet einzubinden. Nebenbei kannste ja auch über jdbc auch auf die mysql connecten.
 
Sicaine hat gesagt.:
Hm was hast du den gegen einsatz von Java? Mit nem JTree is es doch super praktisch da ein Applet einzubinden. Nebenbei kannste ja auch über jdbc auch auf die mysql connecten.
Ich bin mir zu 99,99% sicher, dass du, bzw. er JavaScript meinte. ;)
Wobei ich davon auch kein Fan bin.


byez
 
Und ich bin mir 100% sicher, dass das von mir Ironie war ;-)

@Threadersteller Java != Javascript. Abgesehen vom ähnlichen Namen is das eine ein Apfel und das andere ne Litschie :P
 
Sicaine hat gesagt.:
Und ich bin mir 100% sicher, dass das von mir Ironie war ;-)
So früh am morgen nehm ich vieles zu ernst. Morgenmuffel eben. ^^

Sicaine hat gesagt.:
@Threadersteller Java != Javascript. Abgesehen vom ähnlichen Namen is das eine ein Apfel und das andere ne Litschie :P
Aber der Vergleich ist gut. :D

*ich bin gerade in einer spam-phase, wie mir vorkommt :rolleyes:*
 
Ich glaube nicht, dass du dir richtig mühe gegeben hast das zu lösen, denn solche Lösungen stehen massenhaft im Netz:

Aber da ich auch nicht Jesus bin kauf ich dir das ganze ab. Also du sgast du hast das folgende:

-> Pass bitte eimal auf, dann hast du in Zukunft begriffen:

Tabelle Beschreibung
mit den Felden categorieid und catname

In der categorieid sind die Kategorien dargestellt und in catname die dazugehörige Beschreibung. Jeweils mit zahlen zugeornet.

Bsp: catid 21 catname Laminat
catid 22 catname Parkett
catid 23 catname geölt
catid 24 catname lackiert
catid 25 catname Schiffsboden
catid 26 catname Buche

Zuerst sollte man sich sein Problem vor die Augen führen. Deins sieht folgender massen aus:

Aus der Tabelle "Kategorie" sollen alle Kategorienen ausgelesen werden, diese dann mit jeweiligen Ergebnisse aus der Tabelle "Beschreibung" erweitert werden.

Du siehst erstmal ein Problem vor Augen, dass du nicht lösen kannst. Gehe aber Schritt für Schritt vor:

Aus der Tabelle "Kategorie" sollen alle Kategorienen ausgelesen werden ...

PHP:
$result=mysql_query("SELECT * FROM Kategorie ORDER BY categorieid ASC");
for($i=0;$i<10000 && $row=mysql_fetch_array($result);$i++){
echo "<b><u>$row[parentid]</u>:</b><br>";
}

Genau dies haben wir jetzt erledigt kommen wir zum nächsten Teilproblem

...diese dann mit jeweiligen Ergebnisse aus der Tabelle "Beschreibung" erweitert werden.

Es ist wohl erdenklich, dass du dzu wissen musst welche Kategorie gerade drann ist also erweiterst du den Script und liest einfach durch eine neue Schleife aus.

PHP:
$result=mysql_query("SELECT * FROM Kategorie ORDER BY categorieid ASC");
for($i=0;$i<10000 && $row=mysql_fetch_array($result);$i++){
echo "<b><u>$row[parentid]</u>:</b><br>";
unset($thsicatid,$resultb,$rowb);
$thiscatid = $row[catid];
$resultb=mysql_query("SELECT * FROM Beschreibung WEHRE categorieid='$thiscatid'");
for($a=0;$a<1000 && $rowb = mysql_fetch_array($resultb);$a++){
echo "--$rowb[parentid]<br>";
}
}

Genause kanst du noch SELECT COUNT(*) einbringen!
 
Sorry Lukasz,
aber Du kannst Doch nicht für jede Kategorie die Beschreibung einzeln aus der DB ziehen.
Ok, Du kannst schon, aber das sollte man nicht machen. Das ganze in einem Query zu erledigen ist meist effizienter:
Code:
SELECT * FROM Kategorie LEFT JOIN Beschreibung ON (Kategorie.categorieid=Beschreibung.categorieid) ORDER BY categorieid ASC
Und warum machst Du die for-Schleifen mit $i und $a? Du verwendest die Werte doch gar nicht?
Eine while-Schleife halte ich für passender:
PHP:
$result=mysql_query("SELECT * FROM Kategorie LEFT JOIN Beschreibung ON (Kategorie.categorieid=Beschreibung.categorieid) ORDER BY categorieid ASC");
while ($row=mysql_fetch_array($result)) {
//...
}
Das alleine löst das Aufklappen-Problem noch nicht, aber dazu hilft vielleicht dieser Thread und als Ergänzung dieser.
 
Ja geht auch!

Natürlich ist deine Lösung besser, und er / sie sollte auch diese Verwenden. Mir ging es eben nur darum zu zeigen wie er / sie sicherlich zu einer Lösung gekommen wäre.
Wobei die Lösung von mir auch ihren Zweck erfüllt, jedoch etwas langsammer ist.

Grüsse!

Und warum machst Du die for-Schleifen mit $i und $a? Du verwendest die Werte doch gar nicht?
Eine while-Schleife halte ich für passender:

Probier mal eine while Schleife wen mehrere Werte kommen, dann weist du warum.
Aber man könnte das auch mit while erledigen aber dann muss num_row zum einstaz kommen und eine bestimmte Spalte vorgegeben sien oder nicht?
 
Zuletzt bearbeitet von einem Moderator:
Zurück