anja: Bei bestimmter Variable bestimmte Seite includen, sonst andere

Hallo,

ich hab folgendes Problem:
http://seite.de/?page=inhalt so sieht eine url bei mir aus.

Ich möchte, dass, wenn $page=inhalt ist, die seite inhalt.php included wird, was ja noch einfach ist, wenn man die Variable nur entsprechend einstellt. Und wenn z.B. http://seite.de/?page=inhalt2 dann eine vorgefertigte Fehlerseite included wird.

Man weiß ja nie, was die Leute alles eingeben und ausprobieren.
Ich habe schon alles versucht, mit if und else, aber irgendwie klappt nichts.

Ich brauche eure Hilfe! Danke!

  1. Mahlzeit,

    Ich möchte, dass, wenn $page=inhalt ist, die seite inhalt.php included wird, was ja noch einfach ist, wenn man die Variable nur entsprechend einstellt. Und wenn z.B. http://seite.de/?page=inhalt2 dann eine vorgefertigte Fehlerseite included wird.

    switch ($_GET['page']) {  
      case 'inhalt':  
      case 'nochmehrinhalt':  
      case 'superduperinhalt':  
        include($_GET['page'].'.php');  
      break;  
      
      default:  
        include('hamwanet.php');  
    }
    

    Man weiß ja nie, was die Leute alles eingeben und ausprobieren.

    Genau deshalb ist die Prüfung, was genau übergeben wurde, auch wichtig.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hello Ekki,

      include($_GET['page'].'.php');

      ist das Dein Ernst?
      Eine bessere Lücke kann man gar nicht bauen!

      Ein harzliches Glückauf

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Mahlzeit,

        include($_GET['page'].'.php');

        ist das Dein Ernst?

        Ja.

        Eine bessere Lücke kann man gar nicht bauen!

        Falsch - lies den Rest vom Code.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hello,

          include($_GET['page'].'.php');

          ist das Dein Ernst?

          Ja.

          Tschuldigung *duck*
          Deine case-Bedingungen fangen das ab.

          Aber ich würde trotzdem nicht so faul sein, und diese "Universalzeile" grundsätzlich aus meinem Code verbannen. Wenn einem aus versehen sowas dann mal ohne case passiert, ist das Malheur da.

          Ein harzliches Glückauf

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
    2. Hi,

      switch ($_GET['page']) {

      case 'inhalt':
        case 'nochmehrinhalt':
        case 'superduperinhalt':
          include($_GET['page'].'.php');
        break;

      default:
          include('hamwanet.php');
      }

        
      genauso sollte man es nicht machen, auch wenn es augenscheinlich funktioniert.  
      Zum einen wäre switch bei einer umfangreichen Navigation recht umständlich. Zum anderen aber ist es unsinnig, ein Fehlerseite mit Statuscode 200 OK auszuliefern. Schließlich impliziert dieser Beispielcode, dass die Seiten auch direkt aufgerufen werden können, was ebenfalls vermieden werden sollte.  
        
      Also zunächstmal das grundlegene [EVA-Prinzip](http://de.wikipedia.org/wiki/EVA-Prinzip) beachten und die Eingaben als allererstes auswerten. Man könnte die vorhanden Seiten in einem Array vorhalten oder bei gleicher Benennung der Dateien auf deren Existenz (in einem über HTTP nicht erreichbaren Verzeichnis) prüfen. Dann einfach nur ein Flag setzen ob vorhanden oder nicht; dieses vor der ersten Ausgabe prüfen und ggfls. den Header mit Statuscode 404 senden.  
        
      Ob dann im dritten Programmteil die Inhaltsdatei per include (oder besser require) eingebunden oder schlicht über readfile ausgegeben wird, sollte schließlch davon abhängig gemacht werden, ob überhaupt PHP-Code enthalten ist.  
        
      freundliche Grüße  
      Ingo
      
      -- 
      [[barrierefreie Ingo Webdesign](http://www.1ngo.de/web/) » [Suchmaschinenoptimierung](http://www.1ngo.de/web/seo.html) | [em?](http://www.1ngo.de/web/em.html) | [IE7 - Bugs](http://www.1ngo.de/web/ie7.html)]
      
      1. @Ingo:
        Okay, ich habe so gut wie kein Wort verstanden xD, tut mir Leid, aber so tiefe Kenntnisse habe ich leider nicht. Das wär schön. Hach.

        @Ekki:
        Das heißt, ich müsste also jede Seite einzelnd auflisten?
        Kann ich das nicht auch über eine Variable übergeben, so dass es einfacher geht?

        @Alle: Vielen Dank schon mal für eure Ansätze. :D

        1. Mahlzeit,

          Das heißt, ich müsste also jede Seite einzelnd auflisten?

          Alle erlaubten, ja. Denn wie Du schon schriebst, weißt Du ja nicht, was die Leute nicht alles vielleicht für Blödsinn eintippen.

          Kann ich das nicht auch über eine Variable übergeben, so dass es einfacher geht?

          WAS willst Du WIE WOHIN übergeben? "All input is evil!" - Du kannst Dich nicht darauf verlassen, dass Dir per GET auch wirklich IMMER korrekte Daten übergeben werden ... Du MUSST sie überprüfen.

          MfG,
          EKKi

          --
          sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        2. Hello,

          Kann ich das nicht auch über eine Variable übergeben, so dass es einfacher geht?

          Ich würde damit eine Textdatei füttern, die in einem geschützten Verzeichnis liegt oder eine Datenbank.

          Da kann man dann auch unterscheiden, welche Usergruppen/welche User die entsprechenden Seiten zur Verfügung haben sollen und welche Funktionen sie in den Seiten benutzen dürfen.

          Und wenn Du es übersichtlich halten willst, dann spendierst Du jeder Seite ein eigenes Unterverzeichnis, in dem alle seitenbezogenen Elemente liegen. Dann kannst Du Dir ein Tool basteln, dass diese Verzeichnisse einsammelt, entweder bei jedem Aufruf dynamisch oder eben gelegentlich in die besagte Textdatei.

          Ich würde aber immer mit einer Positivliste arbeiten, und alle darin nicht enthaltenen "Seiten" auf die von Dir gewünschte Fehlerseite umleiten.

          Ein harzliches Glückauf

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
      2. Mahlzeit,

        genauso sollte man es nicht machen, auch wenn es augenscheinlich funktioniert.

        Es war bzw. ist ein Beispiel.

        Zum einen wäre switch bei einer umfangreichen Navigation recht umständlich.

        Klar. Es ist ja auch nur ein Beispiel. Wenn man haufenweise unterschiedliche Seiten hat, sollte man die eh vielleicht eher in externen Datenquellen verwalten.

        Zum anderen aber ist es unsinnig, ein Fehlerseite mit Statuscode 200 OK auszuliefern.

        Klar. Es ist ja auch nur ein Beispiel, um zu verdeutlichen, wie man als letzte Alternative - wenn keine "gültige" Seite übergeben wurde - eine Standard- bzw. Fehlerseite anzeigen kann.

        Also zunächstmal das grundlegene EVA-Prinzip beachten und die Eingaben als allererstes auswerten.

        Was verstehst Du im konkreten Beispiel darunter? Den Inhalt von $_GET['page'] in eine "lokale" Variable umkopieren? Welchen Sinn soll das haben?

        Man könnte die vorhanden Seiten in einem Array vorhalten oder bei gleicher Benennung der Dateien auf deren Existenz (in einem über HTTP nicht erreichbaren Verzeichnis) prüfen.

        Klar. Würde ich alles auch so machen. Außer, wenn ich ein Beispiel gebe, das als Denkanstoß gedacht ist.

        Dann einfach nur ein Flag setzen ob vorhanden oder nicht; dieses vor der ersten Ausgabe prüfen und ggfls. den Header mit Statuscode 404 senden.

        Klar. Aber anja schien mir nicht grad der Profi zu sein, der die ersten 5 Schritte auslassen und gleich mittendrin anfangen kann ...

        Ob dann im dritten Programmteil die Inhaltsdatei per include (oder besser require) eingebunden oder schlicht über readfile ausgegeben wird, sollte schließlch davon abhängig gemacht werden, ob überhaupt PHP-Code enthalten ist.

        Sicher. Aber wenn anja schreibt "die seite inhalt.php included", dann gehe ich erstmal davon aus, dass die Seite PHP-Code enthält und per include() eingebunden werden soll - was dagegen?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hi,

          Zum anderen aber ist es unsinnig, ein Fehlerseite mit Statuscode 200 OK auszuliefern.

          Klar. Es ist ja auch nur ein Beispiel, um zu verdeutlichen, wie man als letzte Alternative - wenn keine "gültige" Seite übergeben wurde - eine Standard- bzw. Fehlerseite anzeigen kann.

          ein Beispiel, dass eine Fehlerseoite nicht als solche ausliefert, sollte man sich nicht zum Beispiel nehmen.

          Also zunächstmal das grundlegene EVA-Prinzip beachten und die Eingaben als allererstes auswerten.

          Was verstehst Du im konkreten Beispiel darunter? Den Inhalt von $_GET['page'] in eine "lokale" Variable umkopieren? Welchen Sinn soll das haben?

          Den grundlegenden Sinn des EVA-Prinzips zu beherzigen, was in diesem Fall unabdingbar ist, da die Auswertung abgeschlossen sein muss, bevor die erste Ausgabe erfolgt, um überhaupt den Statuscode senden zu können.
          Dazu muss man die GET-Variable nicht unbedingt umkopieren - es reicht auch wie gesagt:

          Dann einfach nur ein Flag setzen ob vorhanden oder nicht; dieses vor der ersten Ausgabe prüfen und ggfls. den Header mit Statuscode 404 senden.

          freundliche Grüße
          Ingo