$GET mit Array abgleichen.
Powl
- php
0 Auge
Moin,
ein php script liest den GET Inhalt aus und weist diesem entsprechende Inhaltsdateinen zu, die in einem Array vorgegeben sind, und zwar so.
$inhalt = array();
$inhalt['home'] = "contents/home.tpl";
$inhalt['home_home1'] = "inhalt/home_home1.tpl";
$inhalt['home_home2'] = "inhalt/home_home2.tpl";
$inhalt['home_home3'] = "inhalt/home_home3.tpl";
$inhalt['item2'] = "contents/item2.tpl";
inhalt['item2_sub1'] = "inhalt/item2_sub1.tpl";
inhalt['item2_sub2'] = "inhalt/item2_sub2.tpl";
...
gibt man jetzt z. b. als Adresse ein http://bla.test/index.php?page=home, dann wird das enstprechnde *.tpl eingelesen und die Seite entprechend zusammengestellt. Das funktioniert auch wunderbar.
Das einzige Problem ist nun daß, wenn man mit $_GET eine nicht exsistente *.tpl Datei aufruft (z.B. http://bla.test/index.php?page=home_sub4 ) eine PHP Fehlermeldung erscheint. Was ja auch in Ordnung ist.
Allerdings wäre es besser, wenn statt dessen ein 404er käme, da der Durchschnittssurfer mit der PHP Fehlermeldung kaum etwas wird anfangen können.
Was ich also machen müßte, wenn ich mich nicht irre, ist zu überprüfen, ob der mit $_GET aufgerufene Parameter im Array 'inhalt' angegeben wurde. Mein Ansatz wäre mittels foreach alle Werte im Array mit dem Wert von $_GET abzugleichen und in dem Moment wenn eine Übereinstimmung gefunden wird, die Schleife zu verlassen und die entsprechende Seite auszugeben.
Wenn alle Werte überprüft wurden, ohne eine Übereinstimmung zu finden dann eben mittels header-funktion eine 404er Fehlerseite aufrufen.
Das ist wohl _ein_ gangbarer Weg. Ich frage mich nur, ob es eine elegantere Möglichkeit gibt als diese?
viele Grüße
^da Powl
Hallo
Das ist wohl _ein_ gangbarer Weg. Ich frage mich nur, ob es eine elegantere Möglichkeit gibt als diese?
Du kannst das Array $inhalt
so gestalten, dass du mit if (in_array($_GET["blubb"],$inhalt))
prüfen kannst, ob der übergebene Wert irgendeiner Erwartung entspricht.
Tschö, Auge
Hi,
Das ist wohl _ein_ gangbarer Weg. Ich frage mich nur, ob es eine elegantere Möglichkeit gibt als diese?
Du kannst das Array
$inhalt
so gestalten, dass du mitif (in_array($_GET["blubb"],$inhalt))
prüfen kannst, ob der übergebene Wert irgendeiner Erwartung entspricht.
in diesem Fall mit isset(), da in_array auf einen Wert prüft, der GET-Parameter jedoch den Key im Array angibt. isset($array[$key]) gibt True zurück wenn der Key $key im Array $array existiert.
Schöne Grüße
Julian
Hi,
in diesem Fall mit isset(), da in_array auf einen Wert prüft, der GET-Parameter jedoch den Key im Array angibt. isset($array[$key]) gibt True zurück wenn der Key $key im Array $array existiert.
Du willst Doch nicht wirklich vorschlagen, zimal mit isset() zu prüfen, anstatt einmal am Anfang array_key_exists() abzufragen?
freundliche Grüße
Ingo
Hi,
in diesem Fall mit isset(), da in_array auf einen Wert prüft, der GET-Parameter jedoch den Key im Array angibt. isset($array[$key]) gibt True zurück wenn der Key $key im Array $array existiert.
Du willst Doch nicht wirklich vorschlagen, zimal mit isset() zu prüfen, anstatt einmal am Anfang array_key_exists() abzufragen?
es soll doch nur geprüft werden, ob ein bestimmter Key (der als GET-Parameter übertragen wird) im Array existiert. Da sehe ich nicht, warum zig Abfragen nötig sind. Es ist ein einziges if (isset($inhalt[$_GET["page"]])) notwendig.
Schöne Grüße
Julian
Hi,
Du willst Doch nicht wirklich vorschlagen, zimal mit isset() zu prüfen, anstatt einmal am Anfang array_key_exists() abzufragen?
Es ist ein einziges if (isset($inhalt[$_GET["page"]])) notwendig.
Stimmt, so geht's auch und ist im Prinzip ja auch das gleiche.
freundliche Grüße
Ingo
Hallo,
erstmal vielen DAnk für Eure Antworten. Diese:
Du kannst das Array
$inhalt
so gestalten, dass du mitif (in_array($_GET["blubb"],$inhalt))
prüfen kannst, ob der übergebene Wert irgendeiner Erwartung entspricht.
scheint mir am nächsten an der Lösung zu sein. Wenn ich das richtig deute, dann gibt dieser Ansatz true zurück, wenn der Wert von $_GET['blubb'] im Array $inhalt enthalten ist, und false, wenn nicht?
Das würde es überflüssig machen mit foreach zu arbeiten und wäre dann in der Tat eine elegantere Lösung.
Das porbiere ich mal aus, danke.
^da Powl