Powl: $GET mit Array abgleichen.

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

  1. 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

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    Veranstaltungsdatenbank Vdb 0.1
    1. 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 mit if (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

      1. 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

        1. 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

          1. 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

    2. Hallo,

      erstmal vielen DAnk für Eure Antworten. 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.

      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