php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.01.2011, 15:37  
Neuer Benutzer
 
Registriert seit: 22.11.2010
Beiträge: 7
PHP-Kenntnisse:
Anfänger
MadMax befindet sich auf einem aufstrebenden Ast
MadMax eine Nachricht über MSN schicken MadMax eine Nachricht über Skype™ schicken
Standard [Erledigt] Problem bei PHP-Menü mit Parent-Modell

Ich habe mir einen code für ein dynamisches Menü gebaut, dass auf Mysql aufgebaut ist. Hier ist einmal der code:
PHP-Code:
<?php
//zuerst wird hier die aktuelle Seite aus einer Datenbank abgefragt.
//Wichtige Teile sind hier: 
//$row->parentid = Die id der übergeordneten Seite.
//$row->id = Die id der aktuellen Seite.

error_reporting(E_ALL);

define('MYSQL_HOST''localhost');
define('MYSQL_USER''bn');
define('MYSQL_PASS''pw');
define('MYSQL_DATABASE''db');

//connect to database
function connect_to_sql(){

@
mysql_pconnect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR
die(
"Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR
die(
"Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());

}
function 
getLevel($iIdParent$test) {

$sQuery 'SELECT id, titel, link, parentid, content_id FROM `datenbank`.`seiten` WHERE parentid = "'.$iIdParent.'" ORDER BY content_id;';
$rResult mysql_query($sQuery);
while (
$aLine mysql_fetch_object($rResult)) {

echo(
'<a href="'.$aLine->link.'.htm">'.$aLine->titel.'</a><br/>');

if (
$test == $aLine->id) {
$test=$aLine->parentid;
getLevel($aLine->id$test); 
}

}

}
$obid=$row->parentid;
$test2=$row->id;
connect_to_sql();
getLevel($obid$test2);
?>
Es funktioniert soweit, leider werden immer nur 2 Ebenen ausgegeben. Ich habe aber vier. Wenn man bei der zweiten Ebene auf einen Link klickt, sieht man nur noch die 2. und die 3. Ebene. Die erste verschwindet einfach.

Hoffe Ihr könnt mir helfen.
Vielen Dank schon im Voraus

Geändert von MadMax (11.01.2011 um 19:23 Uhr). Grund: Passwort muss ja nicht jeder wissen
MadMax ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 09.01.2011, 16:47  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Du machst Deine Rekursion ja auch nur für alle Nodes unterhalb der angegebenen. Du wirst schon die darüber liegenden auch mit in die Rekursion einbinden müssen.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 09.01.2011, 16:53  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Beim kurzen überfliegen fällt mir auf, daß Du nur die aktuell angeklickte Ebene und deren Parent-Ebene lädst.
Kein Wunder, daß nur die beiden angezeigt werden...


Uuups ganze 6min Unterschied, trotzdem nicht gesehen!
Jens hat sich vorgeschlichen
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein

Geändert von Arne Drews (09.01.2011 um 16:55 Uhr). Grund: Hab Jens Beitrag nicht gesehen...
Arne Drews ist offline   Mit Zitat antworten
Alt 09.01.2011, 16:55  
Neuer Benutzer
 
Registriert seit: 22.11.2010
Beiträge: 7
PHP-Kenntnisse:
Anfänger
MadMax befindet sich auf einem aufstrebenden Ast
MadMax eine Nachricht über MSN schicken MadMax eine Nachricht über Skype™ schicken
Standard

Danke erst mal für die schnelle Antwort.

Stimmt. Wenn ich jetzt aber die Funktion mit 0 anfange:
PHP-Code:
$obid=$row->parentid;
$test2=$row->id;
connect_to_sql();
getLevel(0$test2); 
Dann klappt nur noch die 2. Ebene auf.
Was muss ich Verändern?
MadMax ist offline   Mit Zitat antworten
Alt 09.01.2011, 20:39  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Du musst den gesamten Pfad aller offenen Ebenen übergeben.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 09.01.2011, 21:24  
Neuer Benutzer
 
Registriert seit: 22.11.2010
Beiträge: 7
PHP-Kenntnisse:
Anfänger
MadMax befindet sich auf einem aufstrebenden Ast
MadMax eine Nachricht über MSN schicken MadMax eine Nachricht über Skype™ schicken
Standard

Wie mach ich das genau?
__________________
Hier ist das Ende meines Beitrags
Abbrechski
MadMax ist offline   Mit Zitat antworten
Alt 09.01.2011, 21:56  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Nimm mal an, Dein Menü hat die folgende Struktur:
  • Punkt 1
    • Punkt 1.1
      • Punkt 1.1.1
      • Punkt 1.1.2
        • Punkt 1.1.2.1
        • Punkt 1.1.2.1
        • Punkt 1.1.2.1
      • Punkt 1.1.3
  • Punkt 2
  • Punkt 3
    • Punkt 3.1
      • Punkt 3.1.1
      • Punkt 3.1.2
        • Punkt 3.1.2.1
        • Punkt 3.1.2.1
        • Punkt 3.1.2.1
      • Punkt 3.1.3

Wenn Du jetzt nur 1.1.2 kennst und 1.1.2.X anzeigen möchtest, dann weißt Du mit den zur Verfügung stehenden Informationen nie, ob Du - sagen wir 3.1.1 und 3.1.2 anzeigen musst. Du musst also von oben nach unten alle offenen Menüpunkte mit übertragen, um PHP-Seitig darüber entscheiden zu können. Du brauchst also eher sowas 1/1.1/1.1.2. Damit weißt Du, welche Nodes angezeigt werden müssen und welche nicht - im Pfad sind schließlich immer die Parent-Elemente der anzuzeigenden Nodes enthalten

Diesen Pfad kannst Du natürlich in Kenntnis der tiefsten Node auch PHP-Seitig ermitteln, bevor Du zur Darstellung schreitest - innerhalb dieser einen Rekursion geht das aber nicht.

Übrigens: Grad bei kleinen Bäumen bietet es sich an, die Rekursion nicht mittels mehrerer Queries zu machen, sondern indem Du den kompletten Baum erst einmal in einen Speicher lädst. Der Aufwand für einen DB-Zugriff ist um Längen höher, als der für einen Array-Zugriff.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 10.01.2011, 14:21  
Neuer Benutzer
 
Registriert seit: 22.11.2010
Beiträge: 7
PHP-Kenntnisse:
Anfänger
MadMax befindet sich auf einem aufstrebenden Ast
MadMax eine Nachricht über MSN schicken MadMax eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Jens Clasen Beitrag anzeigen
Wenn Du jetzt nur 1.1.2 kennst und 1.1.2.X anzeigen möchtest, dann weißt Du mit den zur Verfügung stehenden Informationen nie, ob Du - sagen wir 3.1.1 und 3.1.2 anzeigen musst.
Ich will immer nur die Unterpunkte eines Hauptpunktes anzeigen:
Also wenn ich auf 1.2 klicke sollte folgendes angezeigt werden.

1.
1.1
1.2
1.2.1
1.2.2
1.3
2.
3.
4.

Die Unterpunkte von 2./3./4. usw müssen nicht angezeigt werden.
__________________
Hier ist das Ende meines Beitrags
Abbrechski
MadMax ist offline   Mit Zitat antworten
Alt 11.01.2011, 15:12  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Und was ist mit dem Beispiel hier:
1.
1.1
1.2
1.2.1
1.2.1.1
1.2.1.2
1.2.2
1.3
1.3.1
1.3.2
2.
3.
3.1
4.


Woher willst Du nur mit der Information 1.2.1 entscheiden, ob Du nun 1.3 anzeigst?

Du musst immer alle Elemente neben denen der Teile Deiner Pfadangabe ausgeben, sowie alle Kinder besagter Information komplett.

Wenn Du also als Pfad das hier hast:
1/1.2/1.2.1

dann kannst Du daraus folgern, dass Du

-1 bis 4 anzeigen musst (alle mit Elter "null")
- 1.1 bis 1.3 anzeigen musst (alle mit Elter 1, also erstes Element d. Pfades)
- 1.2.1 bis 1.2.2 (also alle mit Elter 1.2, bzw. zweites Element d. Pfades)
- 1.2.1.1 bis 1.2.1.2 (also alle mit Elter 1.2.1, bzw. letztes Element d. Pfades)

Nicht anzeigen musst Du 1.3.1, 1.3.2 und 3.1 weil deren Elter-Elemente kommen nicht in der Pfadangabe vor.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 11.01.2011, 19:03  
Neuer Benutzer
 
Registriert seit: 22.11.2010
Beiträge: 7
PHP-Kenntnisse:
Anfänger
MadMax befindet sich auf einem aufstrebenden Ast
MadMax eine Nachricht über MSN schicken MadMax eine Nachricht über Skype™ schicken
Standard

So ein Beispiel gibts ja nicht.
Es gibt nur solche :

1.
1.1
1.2
1.2.1
1.2.2
1.3
2.
3.
4.

oder solche:
1.
2.
3.
3.1
3.2
3.3
3.3.1
3.3.2
3.4
4.

aber nicht:
1.
2.
2.1
2.2
2.2.1
2.2.2
2.3
3.
4.
4.1
4.2
4.2.1
4.3
__________________
Hier ist das Ende meines Beitrags
Abbrechski
MadMax ist offline   Mit Zitat antworten
Antwort


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
[Erledigt] Menü - Ideensammlung richardf HTML, Usability und Barrierefreiheit 9 14.09.2010 15:21
[Erledigt] Komisches IE Problem ByStones PHP Tipps 2010 6 26.06.2010 11:06
[Erledigt] CSS und Javascript Dropdown Menu IE PROBLEM unreal87 HTML, Usability und Barrierefreiheit 3 19.05.2010 19:20
[Erledigt] CSS Drop Down Menü und IE Problem gombi HTML, Usability und Barrierefreiheit 10 18.01.2010 15:54
[Erledigt] Problem mit Mehrsprachigkeit Sniper_Kotaro PHP Tipps 2009 2 16.12.2009 11:47
PHP Pulldown / Dropdown menu djsky PHP Tipps 2009 11 29.11.2009 21:09
Umlaut Problem nokieone PHP Tipps 2009 7 16.10.2009 19:30
Box Modell, CSS Darstellungs Problem. Kein Genie HTML, Usability und Barrierefreiheit 9 11.06.2009 13:00
Problem mit Link PHP Tipps 2005-2 5 09.09.2005 08:59
PHP Menu mit 2 untermenus PHP Tipps 2005 3 23.05.2005 00:04
Problem mit Menü nullplan PHP Tipps 2005 1 24.03.2005 22:11
problem mit Menü feld und datenbank auslese 4x4styling Datenbanken 3 11.02.2005 11:17
dropdown menü problem HTML, Usability und Barrierefreiheit 2 18.08.2004 09:13
Problem mit drop-down menu HTML, Usability und Barrierefreiheit 3 04.08.2004 19:56
[Erledigt] PopDown Menü fast fertig!! HTML, Usability und Barrierefreiheit 3 27.07.2004 00:11

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
parent modell, php menuebaum parent, parent model php, php dynamisch menü, dynamisches menü php parent modell 4 ebenen, menü datenbank parent, menü php parent, menü auf parent, parent id php, php eltern kind model link mysql, menü php parentid, baumstruktur x ebenen parent id php mysql, php menue code, \php menü\, $parent php ebene, php parent, parent-modell php, php alle übergeordneten parents herausfinden, php parent does not work, phpmenü in dropdown einbetten

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:51 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