URL: https://www.overclockers.at/coding-stuff/php_rekursiver_unterprogrammaufruf_103240/page_1 - zur Vollversion wechseln!
Ich steh derzeit vor dem Problem dass ich eine ganze Latte von Artikeln ausgeben möchte, die jedoch "verzeichnisartig" verschachtelt sind..
Jeder Artikel bezieht sich auf nen anderen.
artikel
`-artikel
|-artikel
|-artikel
| `-artikel
`-artikel
artikel
|-artikel
|-artikel
`-artikel
würde folgender Kode funktionieren?
Code: PHPfunction links($quelle = 0) { $ressourceid = mysql_query("SELECT kurztitel, ID FROM artikel WHERE quelle=$quelle SORT BY reihenfolge ASC;"); $datensatz = mysql_fetch_assoc($ressourceid)); while($datensatz) { printf('%s',$datensatz[kurztitel]); links($datensatz[ID]); } }
ja, also es fehlt dir mal ein funktionsname...
dann glaub ich kaum dass dir jemand helfen kann wenn er deinen db-aufbau net kennt - abgesehen davon glaub ich nicht dass dein code auch nur annähernd das gewünschte ergebnis liefert
ROFL, ganz übersehn :lol:Zitat von watchoutja, also es fehlt dir mal ein funktionsname...
ah, versteh - sollte deine funktion zufällig "links" heissen?
worin meiner Meinung nach die Schwierigkeit besteht:
$datensatz = mysql_fetch_assoc($ressourceid)); gibt nach der Reihe sämtliche Datensätze aus auf die der SQL-Befehl zutrifft.
Gerade wenn der erste Datensatz geliefert wurde, wird dieser erste Befehl jedoch von einem zweiten unterbrochen.. (Nämlich genau dann, wenn sich links($quelle) selber neu startet)
Jedoch muss nachher mit der Ausgabe des ersten Befehls fortgefahren werden..
Geht das?
jup. Hab den ersten Post editiert..Zitat von watchoutah, versteh - sollte deine funktion zufällig "links" heissen?
die abfragen sollten sich nicht gegenseitig stören, da $ressourceid eine lokale (und daher auf den aktuellen funktionsaufruf beschränkte variable is und sich mysql an eben dieser id orientiertCode: PHPfunction links($quelle = 0) { $ressourceid = mysql_query("SELECT kurztitel, ID FROM artikel WHERE quelle=$quelle SORT BY reihenfolge ASC;"); while($datensatz = mysql_fetch_assoc($ressourceid))) { printf('%s',$datensatz[kurztitel]); links($datensatz[ID]); } }
ah, sehr gut..Zitat von watchoutdie abfragen sollten sich nicht gegenseitig stören, da $ressourceid eine lokale (und daher auf den aktuellen funktionsaufruf beschränkte variable is und sich mysql an eben dieser id orientiert
also ich habs so gelöst, dass ich die unterteilungen abgefragt habe, und zu jeder unterteilung eine abfrage die wieder nach unterteilungen sucht... hab allerdings eine andere db struktur
nein, weil bei einem aufruf der funktion nur ein datensatz des ergebnisses zurückgegeben wird.Zitat von Dr. Creutzfeldbtw: Sollte es nicht egal sein, ob $datensatz als argument von while() oder als eigener Befehl deklariert wird?
sry, versteh ich jetzt nicht ganz..
wenn mysql_fetch_assoc($ressourceid) FALSE zurückliefert, wird dieses FALSE doch eh $datensatz zugewiesen..
und wenn $datensatz als argument von while() angegeben wird, sollte dies doch schlußendlich imho aufs selbe rauskommen?
ja, aber is die schleife dann ne endlosschleife, weil $datensatz _immer_ true is
wennst es net checkst glaub mir einfach - es stimmt irgendwann geht dir vielleicht der knopf auf, lies dir am besten die doku ein paarmal durch
ich habe das problem bei mir so gelöst:
jeder artikel hatte in der db ein feld namens SUB. das enthielt die ID von der untergruppe. Dann spang er zu der id, gab alles aus, checkte ob SUB vorhanden war ==> wenn ja ==> sprung zu SUB ==> wenn nein => raus
was er mit der schleife machen wollte geht nur mit arrays [z.b. while($ergebnis = mysql_fetch_assoc($wie_auch_immer)){ ]
und zur mysql abfrage: mach "SELECT * FROM ..."... weil obst du nur einen haben willst oder viele, ausgeben musst du immer mit $ergebnis['wie_auch_immer']...
ich hab mich auch grad mit so was beschäftigt, nur bei mir war es ein menü mit untermenüs.... wenn du mir ein bisschen genauer erklärst was du willst (hab es nicht ganz verstanden), kann ich kurz schauen, ob der quellcode passt und ihn hier reinstellen
ich glaub ich habs jetzt verstanden..Zitat von watchoutja, aber is die schleife dann ne endlosschleife, weil $datensatz _immer_ true is
creutzfeld, is das ne hausaufgabe oder wie?
edit: ja, hört sich gut an
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025