[PHP] mehrere "switch" in einem verwenden

digiTALE

Lt. Junior Grade
Registriert
Juli 2004
Beiträge
270
Seid gegrüßt,

ich bin gerade dabei für unsere Firma die Webseite aufzubauen. Ich versuche gerade mit Templates zu arbeiten und der Inhalt soll dann dynamisch included werden.
Dabei will ich die PHP-Funktion switch verwenden.

PHP:
switch ( isset($_GET['cat']) )
{

	case "unternehmen":

		switch ( isset($_GET['subcat']) )
		{

			case "geschichte": $SWITCH = "geschichte"; break;

			case "mitarbeiter": $SWITCH = "mitarbeiter"; break;

			case "referenzen": $SWITCH = "referenzen"; break;

			case "presse": $SWITCH = "presse"; break;

			default: $SWITCH = "unternehmen"; break;

		} break;

	case "impressum": $SWITCH = "impressum"; break;

	case "agb": $SWITCH = "agb"; break;

	case "sitemap": $SWITCH = "sitemap"; break;

	default: $SWITCH = "startseite"; break;

}

Hab leider nicht wirklich was finden können, ob das so wirklich funktioniert.
Geht das überhaupt?

Mfg digiTALE
 
Hab ich ja gemacht, klappt aber nicht! Vllt. hab ich ja auch was vergessen, worauf ich jetzt ne komme!?
 
Was klappt denn nicht? Gibt es eine Fehlermeldung? Passiert nichts? Wird was falsches eingebunden? ;)

Das hier ist im übrigen nicht ok:

switch ( isset($_GET['cat']) )

Ob $cat übergeben wurde, solltest du mit einem if() überprüfen und dann ein switch ($_GET['cat']) ... nutzen.
 
Zuletzt bearbeitet:
Wenn ich den Link http://www.domain.de/?cat=impressum aufrufe dann bleibt er beim Unternehmen stehen und lädt deren Inhalt. Es gibt keine Fehlermeldung!

EDIT: Aah, es lag wirklich an dem isset(). Merkwürdig, gab aber erst einen Fehler notice...
 
Zuletzt bearbeitet:
Nachdem du ja nun rausgefunden hast, dass man switch-Blöcke verschachteln kann, möchte ich dir jedoch raten, im Sinne der Lesbarkeit von Code, nach Möglichkeit darauf zu verzichten.

Stell dir vor wie das aussieht, wenn in jedem case des äußeren switch-Blocks wieder ein switch-Block implementiert ist. Lesbar ist das dann nicht mehr. Ich spreche da aus Erfahrung, da ich Code eines Ex-Kollegen weiterpflegen muss, bei dem das an einigen Stelle so ist. Erschwerend kommt dabei hinzu, dass sowohl die äußeren als auch die inneren switch-Blöcke teilweise über 10 cases verfügen und das gesamte Konstrukt dabei dann 4-5 Bildschirmseiten lang wird. Lesen kann man den Code nicht mehr.

Ich empfehle dir dringend, den inneren switch-Block in eine seperate Funktion auszulagern.

j o e
 
Man sollte den switch-Befehl bei Strings sowieso vermeiden... Was spricht denn gegen IF-Statements?

Zudem frage ich mich eh ein wenig nach dem Sinn des Ganzen...
Ich vermute du codierst da eine Art Menü-Struktur. Diese im Quellcode zu haben ist alles andere als elegant.
Wieso machst du es nicht so, dass du einfach mal annimmst, die Parameter wären ok, und schaust dann, ob es überhaupt z.B. eine passende Datei dazu gibt (hier ist natürlich wichtig zu prüfen, ob man nicht einem Angriff ausgesetzt ist und versucht wird, eine Datei von einem anderen Server einzuschleusen), wenn nicht, wird eine Standard-Fehlerseite oder evtl die Startseite angezeigt?
 
Zurück
Oben