[Suche] php script zur dynamischen Seitennavigation

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
Seimon
Mitglied
Beiträge: 893
Registriert: 23.02.2005 18:10
Wohnort: Linz, Österreich

Beitrag von Seimon »

Vermutlich weil du mit

Code: Alles auswählen

$leer2[$i]
an die ite Stelle im String springst - "<br />" hat aber mehr als eine Stelle.

Versuch mal

Code: Alles auswählen

$leer2 .=  "<br />";
statt

Code: Alles auswählen

$leer2[$i] = "<br />";
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo Seimon,

danke dir, hat geklappt, hatte da wohl einen kleinen Denkfehler drinnen.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo Leute,

ich muss das Thema noch einmal aufgreifen und bräuchte dazu etwas Hilfe von einem mysql Fachmann.

Mein Problem ist folgendes:
Für die Navigation auf meiner neuen Homepage (noch nicht Freigegeben, Zugang auf Anfrage) verwende ich eine dynamische Lösung bei welcher die Menüpunkte in Abhängigkeit der aufgerufenen Seite aus einer Datenbank generiert werden. Das funktioniert auch wunderbar, nur ein Problem habe ich jetzt dabei.

Wenn ich in die Tabelle neue Menüpunkte eintrage, so werden diese nicht im Untermenü an der richtigen Stelle angezeigt, sondern werden am Ende des Menüs angefügt. Die Menüpunkte sind in der Tabelle ähnlich wie die Punkte bei einer Aufzählung in einem Word-Dokument z.B. 5.8.1.3.2.0 usw. eingetragen, wobei für jede Stelle eine eigene Spalte vorhanden ist.

Beispiel:

5.8.1.3.2.0 ergibt dann toptab = 5, subtab_1 = 8, subtab_2 = 1, subtab_3 = 3, subtab_4 = 2, subtab_5 = 0


[EDIT]
Habe den Code bei der Gelegenheit noch etwas optimiert (hat aber das Problem nicht gelöst)

Ausschnitt aus der navigation.php

Code: Alles auswählen

$sql_array = array(
	'SELECT'	=> 'n.*, g.group_id, g.user_id',

	'FROM'		=> array(
		SVI_NAVIGATION_TABLE	=> 'n',
	),

	'LEFT_JOIN'	=> array(
		array(
			'FROM'	=> array(USER_GROUP_TABLE => 'g'),
			'ON'	=> "n.tab_group_id = g.group_id AND g.user_id = $benutzer_id",
		),
	),

	'WHERE'		=> "(
			((n.toptab = $top_select) AND (n.subtab_1 = $sub_1) AND (n.subtab_3 = 0) AND (n.subtab_4 = 0))
		OR 
			((n.toptab = $top_select) AND (n.subtab_1 = $sub_1) AND (n.subtab_2 = $sub_2) AND (n.subtab_4 = 0)) 
		OR   
			((n.toptab = $top_select) AND (n.subtab_1 = $sub_1) AND (n.subtab_2 = $sub_2) AND (n.subtab_3 = $sub_3) AND (n.subtab_5 = 0)) 
		OR 
			((n.toptab = $top_select) AND (n.subtab_1 <> $sub_1)  AND (n.subtab_2 = 0) AND NOT ((n.toptab = $top_select) AND ((n.tab_group_id = 0) OR (n.tab_group_id = g.group_id)) AND (n.subtab_1 = 0))) 
		AND 
			($status = 0) AND (n.tab_active = 1)) 
		",

	'ORDER BY'		=> "n.toptab, n.subtab_1, n.subtab_2, n.subtab_3, n.subtab_4, n.subtab_5 ASC",

);
$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query($sql, 3600);

In der Tabelle sind die Daten der Reihe nach aufgelistet Z.B.
....
230 = 5.8.1.3.0.0
231 = 5.8.1.3.1.0
232 = 5.8.1.3.2.0
233 = 5.8.1.3.3.0
....
253 = 9.1.1.0.0.0
....
260 = 5.8.1.3.4.0 (neue Punkte)
261 = 5.8.1.3.5.0 (neue Punkte)

Wobei die tab_id fortlaufend ist, den PRIMARY Schlüssel trägt und ein auto_increment darauf liegt. Weitere Indezis werden nicht verwendet, da diese die Abfrage deutlich bremsen und auch in der Sortierung keine Änderung bewirken.

Wäre toll, wenn mir da jemand etwas helfen könnte.

Gruß Helmut :wink:
Zuletzt geändert von Helmut am 29.12.2008 19:57, insgesamt 1-mal geändert.
Ich bin nicht ganz dicht.... na und.
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Beitrag von piero »

'ORDER BY' => "n.tab_id, n.toptab, n.subtab_1, n.subtab_2, n.subtab_3, n.subtab_4, n.subtab_5 ASC",
wenn du zuerst nach tab_id sortierst kanns nicht funktionieren ;)

ohne wirds besser funktionieren:

Code: Alles auswählen

'ORDER BY'      => "n.toptab, n.subtab_1, n.subtab_2, n.subtab_3, n.subtab_4, n.subtab_5 ASC", 
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo piero,

danke dir für deine Antwort, aber es bringt nichts wenn ich n.tab_id aus der 'ORDER BY' Anweisung raus lasse. Könnte auch sein, das der Fehler schon oben in der Abfrage selber, also noch vor der Sortierung steckt, was ich aber weniger glaube, da sonst die Auswahl der Menüpunkte ja passt.

Ich habe noch einmal einen Test gemacht und einen weiteren Menüpunkt an anderer Stelle mitten drinnen eingefügt, aber auch dieser wird ganz als letzter Punkt im Menü dargestellt. So gesehen muss der Fehler wohl in der 'ORDER BY' Anweisung liegen, komme aber nicht dahinter warum es nicht klappt.

Auch so geht es nicht:

Code: Alles auswählen

	'ORDER BY'		=> "n.toptab AND n.subtab_1 AND n.subtab_2 AND n.subtab_3 AND n.subtab_4 AND n.subtab_5 ASC",
Gruß Helmut :cry:
Ich bin nicht ganz dicht.... na und.
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Beitrag von piero »

führst du diese abfrage mehrmals oder nur einmal aus?

und nach waas filterst du, dass sie solange wird?
Helmut hat geschrieben:Auch so geht es nicht:
die einzelnen felder per komma zu verbidnen ist schon richtig ^^
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo piero,

ich habe übrigens die Abfrage noch etwas optimiert damit es schneller geht, siehe oben, hat aber das Problem selber nicht beseitigt. Diese Abfrage wird nur einmal beim Seitenaufruf durchgeführt oder eben wenn ich auf einen Menüpunkt klicke.

Bei der Filterung spielt eine Rolle, welche Seite gerade angezeigt wird (n.toptab = $top_select). Danach werden alle Menüpunkte mit Unterpunkte (n.subtab_1 bis 5) abgefragt, die angezeigt werden sollen. Wenn jetzt ein Menüpunkt aber Unterpunkte hat, diese Menüpunkt aber gerade nicht selektiert ist, dann sollen die Unterpunkte dazu nicht angezeigt werden, das macht das Konstrukt bei der Abfrage.

Wie schon gesagt, es werden alle Punkte die Angezeigt werden sollen, auch richtig ausgelesen und richtig angeordnet, nur eben diese nicht, welche Nachträglich in die Datenbank eingefügt wurden. Diese werden zwar Richtig ausgewählt, nur eben am Ende des Menüs angezeigt und nicht da wo sie eigentlich nach dem Eintrag in n.subtab_1 bis 5 sein müssten.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Beitrag von piero »

jetzt nur mal experimentell, damit sicher ist, dass ORDER BY überhaupt funktioniert^^

Code: Alles auswählen

 'ORDER BY'      => "n.toptab DESC",
ordnet nach verkehrter reihenfolge...

wenn die neuen einträge immer noch zuunterst stehen, dann wird der ORDER BY befehl nicht ausgeführt...
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo piero,

habe es gerade getestet, scheint wirklich so, als ob der 'ORDER BY' Befehl überhaupt nicht ausgeführt wird, da sich nichts an der Sortierungs-Reihenfolge ändert.

Ich habe mich an die Anleitung in den Development Wiki bei Dbal.sql build query gehalten, da wird es genauso gemacht. Da stellt sich nun die Frage warum der Befehl nicht ausgeführt wird, denn Fehlermeldung gibs keine.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Beitrag von piero »

hmm... hast du dir die mysqlfehler schonmal ausgeben lassen?

hab ich jetzt nicht getestet, aber so sollte die fehlermeldung von myysql angezeigt werden:

Code: Alles auswählen

$db->sql_error();
(direkt nach der eingabe des querys einfügen)
Antworten

Zurück zu „Coding & Technik“