Frage zu index.php?file=contact
-
Guten Morgen,
ich stehe vor einen Problem, derzeit stelle ich meine Webseiten auf PHP um, doch ich komme an einer Stelle nicht weiter. Ich hab mir eine index File entwickelt in der möchte ich nun verschiedene Inhalte einfügen. Das mit dem normalen include ist mir bereits bekannt. Problem bei dieser Variante ist aber das ich jede neue Seite ändern muss, falls ich vor habe das komplette Design zu ändern.
Eine Abhilfe würde es geben, wenn ich nur noch eine index.php habe und nur noch die einzelnen Inhalte einfüge.
Ich weis leider nicht wie ich das realisieren kann das dies so funktioniert
:
- index.php?file=contact
oder
- index.php?file=start
Sprich es soll einfach der inhalt von contact bzw. start in die index.php eingefügt werden.
Kann mir jemand helfen?
Vielen Dank schonmal.
-
Du schaust einfach in $_GET['file'] nach, prüfst das noch auf Gültigkeit (damit nich jemand irgendwie damit was einbinden kann, wass du irgendwie gar nicht willst) und baust dir dann damit den entsprechenden include zusammen.
So z.B.
$validPages = array('start','contact'); $page = (in_array($_GET['file'],$validPages)) ? $_GET['file'] : $validPages[0]; include('./includes/'.$page.'.inc.php');
Alternativ kannst beispielsweise auch über ein switch die verschiedenen Seiten einbinden. Wenn du sehr viele Seiten hast, sind diese beiden Varianten natürlich etwas umständlich - da könntest du dann z.B. schauen, dass in $_GET['file'] wirklich nur ein Wort drinsteht und nicht ein ganzer Pfad, damit der User sich nicht in andere Verzeichnisse mogeln kann...
-
Hm, das hört sich doch schonmal gut an.
Es werden definitiv ziemlich viele Seiten, ich sage mal 100+.
Es führt auf jedenfall kein Weg an PHP vorbei, da sonst wie gesagt ein Designänderung extrem ausarten würde.
-
Siehe FAQ!
MfG SideWinder
-
Hi,
danke für die Hilfe, habs soweit verstanden. Die FAQ habe ich leider übersehen, sorry.
Also das mit dem if's scheint mir nicht so recht eine gute Lösung zu sein, da ich dann z.B. hundert Einträge habe. Gut es würde funktionieren, könnte ich das nicht so machen.
index.php&=start.php
und dann in der index.php einfach nur festlegen er darf sich nur im Verzeichnis includes bewegen? So könnte der Benutzer, keine anderen Sachen includen, als das was sich in diesen Ordner befindet.
Dies würde sicherlich auch den Server entlasten, als wenn er alle 100 ifs abfragen muss.
Bin ich da auf den richtigen Weg?
-
Klar, wenn du viele verschiedene Seiten hast, machst du z.B. einfach index.php?file=start und dann in index.php halt überprüfen dass in \_GET['file'] beispielsweise nur Buchstaben vorkommen (mittels eines regülären Ausdrucks) und dann einfach include('./includes/'._GET['file'].'.inc.php'); Dann musst du nur noch abfangen, dass du ggf. einen Fehler bekommst, weil es die Datei nicht gibt.
-
...oder weil der User böse war und du nicht geprüft hast:
index.php?page=../../secret/secret.php
Edit: Sry, die Antwort mittels RegEx steht ja schon da. flenders war mal wieder schneller *g*
MfG SideWinder
-
Guten Morgen,
ich hab da noch ein kleines Problem, also das mit den if usw. hab ich kapiert nur die variable file bekommt scheinbar das page aus der URL nicht übergeben. Sprich die Variable ist 0 oder hat irgendwas anderes als Inhalt.
wo müsste ich das
$_GET['file']
positionieren, oder hab ich was grundsätzliches vergessen, was die Übergabe von werten aus der URL angeht?
-
Wenn du es nicht irgendwo selber überschreibst, kannst du das überall aufrufen.
Mupfel schrieb:
die variable file bekommt scheinbar das page aus der URL nicht übergeben
Wenn du in der URL page schreibst, dann musst du natürlich auch $_GET['page'] nehmen...
-
ja, das habe ich schon verstanden. Ich hab das nur gestern ausprobiert und zwar schaute mein Code so aus:
index.php?page=start
<? php $_GET['page'] if(page == "start") { include "start.php"; } ?>
Ich lande so nie in der if Anweisung, sprich es wird die start.php nicht included. Vermutlich ist irgendwo ein extrem peinlicher Fehler eines Anfängers
-
Ja, also erstens würde es wenn dann $page heißen (aber ich nehme an, das war nur ein Fehler beim posten). Außerdem ist $_GET['page'] einfach der Zugriff auf eine Variable, wenn du das einfach so in eine Zeile schreibst, bewirkt das gar nichts. So könnte es z.B. aussehen:
<? php if($_GET['page'] == 'start') { include('./start.php'); } ?>