[PHP] PHP-Datei auslesen und Inhalt auf der Seite wiedergeben
Hi.
Ich habe folgendes Problem:
Ich habe mehrere PHP-Seiten, die jeweils den Inhalt meiner jeweiligen Seite ausmachen.
Dann habe ich meine start.php, die diese Seiten einlesen soll und nach einem Klick auf einen Link die entsprechende Seite anzeigen soll.
Grundsätzlich wäre es sinnvoll, das ganze noch zu erweitern und mit is_file() zu prüfen, ob die Datei existiert (im Ja-Fall die Datei einbinden, im Nein-Fall einen 404 zurückliefern).
Zitat
Jetzt habe ich nur noch das Problem, dass beim ersten Aufruf der start.php die Startseite nicht angezeigt wird. Bzw. der erste richtige Inhalt.
...
Ungeachtet deines Edits: Wenn du genau im Überblick hast, welche Unterseiten du einbinden willst, kannst du auch mit einem Switch arbeiten und da dann als default Case die Willkommensseite includen.
Ich schätze, er möchte damit Schreibarbeit sparen...
Was aber irgendwie sinnlos ist, imo, ob nun $page oder $_GET['page'], macht imo kaum Unterschiede, 5 Buchstaben gegen 13... naja, trotzdem irgendwie sinnlos.
Außerdem verstehe ich nicht, warum man diese Konstruktion so oft vorfindet:
Völlig sinnlos.
...
Das hat schon seinen Sinn, zumindest wenn der Wert möglicherweise nachträglich verändert wird. Imo ist es nämlich schlechter Stil, die superglobalen Variablen zu verändern - wenn man die Daten verändern muss, macht man das mit einer Kopie. Und ansonsten spart man sich so Schreibarbeit und es sieht schöner aus :P
Das hat schon seinen Sinn, zumindest wenn der Wert möglicherweise nachträglich verändert wird. Imo ist es nämlich schlechter Stil, die superglobalen Variablen zu verändern - wenn man die Daten verändern muss, macht man das mit einer Kopie. Und ansonsten spart man sich so Schreibarbeit und es sieht schöner aus :P
...
Zur Weiterverarbeitung mag das ja nützlich sein. Ich würde einer Variable allerdings sofort die verarbeitete Version zuweisen. Außerdem meine ich, dadurch den Ursprung der Information besser nachvollziehen zu können.
Schreibarbeit? Tasten richtig belegen!
Ob es schöner aussieht ist wohl eher Geschmackssache. $page erinnert zu sehr an die register_globals-Zeit und damit schlechtem Stil. $_GET hebt sich davon majestätisch ab
Bitte nicht, da könnte man ja _alles_ includen (also der User per Manipulation).
Besser wäre imho: include('./pages/'. stripsplashes($page).'.php');
So können nur php Seiten innerhalb des Unterverzeichnisses 'pages' aufgerufen werden. Bei den Links muss man nun halt die Endung weglassen. Also: <a href="?page=home">My Home</a> <!-- führt zu ./pages/home.php -->
Auch sachen wie <a href="?page=../../index">My Home</a> gehen nicht mit meiner Methode (dank stripsplashes).
Zusätzlich würde ich eine überprüfung auf vorhandensein einbauen:
Damit der User nicht eventuelle PHP Fehler sehen muss.
Mal ehrlich: Wenn man schön gecodet hat, kann man eine globale Variable sowieso nur einmal verwenden: Und zwar, wenn man sie per Value an einen einen Konstruktor übergibt.
Wenn es dann nicht mindestens eine selbst geschriebene Funktion ist, hat man bereits etwas falsch designed.
Somit ist es eigentlich nur Haarspalterrei, welcher Stil stilloser ist.
Ich persönlich halte es ja am angenehmsten, die Seiten in eine Tabelle in der Datenbank einzutragen und über die ID zu arbeiten: So kann man auch alles viel einfacher managen, und sortieren. Statistiken sind auch leichter zu erstellen, usw.
Mal ehrlich: Wenn man schön gecodet hat, kann man eine globale Variable sowieso nur einmal verwenden: Und zwar, wenn man sie per Value an einen einen Konstruktor übergibt.
...
Was hat der geschriebene Unterscheid zwischen $page und $_GET['page'] mit dem allgemeinen Programmierungs„stil“ zu tun?
Zitat
Wenn es dann nicht mindestens eine selbst geschriebene Funktion ist, hat man bereits etwas falsch designed.
...
Wenn man, wie du gesagt hast, den Wert übergibt. Eine eigene Funktion bringt aber auch hier nichts, wenn man die globale Variable direkt verwendet, was bei den Superglobalen ja möglich ist.
Zitat
Ich persönlich halte es ja am angenehmsten, die Seiten in eine Tabelle in der Datenbank einzutragen und über die ID zu arbeiten: So kann man auch alles viel einfacher managen, und sortieren. Statistiken sind auch leichter zu erstellen, usw.
...
Ich hoffe, dass das nicht bedeutet, dass du deinen Besuchern Nummern an den Kopf wirfst.
Was hat der geschriebene Unterscheid zwischen $page und $_GET['page'] mit dem allgemeinen Programmierungs„stil“ zu tun?
Wenn man, wie du gesagt hast, den Wert übergibt. Eine eigene Funktion bringt aber auch hier nichts, wenn man die globale Variable direkt verwendet, was bei den Superglobalen ja möglich ist.
Ich hoffe, dass das nicht bedeutet, dass du deinen Besuchern Nummern an den Kopf wirfst.
...
Es geht doch darum, das diese Diskussion auf einen allgemeinen schlechten Programmierstil zurück geht. Wenn man es elegant macht, dann sind alle funktionalitäten in Modulen untergebracht und man greift nur auf sie zu, wenn sie übergeben wurden. Ganz egal, ob sie superblobal sind, oder was auch immer. Da gibt es Designregeln.
Somit ist eine Kopie per Value sowieso /immer/ dabei, da man die superglobale Variable niemals ändert. Theoretisch kann man sie ja auch per Referenz übergeben, aber das ist nur sinnvoll, wenn es um große Arrays geht: Ob du den zahlenwert, oder die Adresse kopierst, ist egal. Nur dauert die Referenzmagie in PHP ewig, da wir den recht natürlichen Mechanismus auf höhere Ebene nachgebaut in Verwendung haben. Somit ist eine Übergabe per Value sinnvoller als Referenz.
Dh. hat man in seinem Modul immer eine Kopie mit einem anderen Namen:
function foo ( $IchBinEineGlobaleVariable ) { }
Somit arbeitet man im Modul sowieso mit einem anderen Namen. Wenn man es noch eleganter macht, ist die Seite ein riesiges Objekt. Somit hat sich die ganze Geschichte sowieso erledigt.
--
"When I was in college, there were certain words you couldn't say in front of a girl," "Now you can say them, but you can't say 'girl." - Tom Lehrer
Es geht doch darum, das diese Diskussion auf einen allgemeinen schlechten Programmierstil zurück geht. Wenn man es elegant macht, dann sind alle funktionalitäten in Modulen untergebracht und man greift nur auf sie zu, wenn sie übergeben wurden. Ganz egal, ob sie superblobal sind, oder was auch immer. Da gibt es Designregeln.
...
Das ist klar, aber man kann nicht erwarten, dass jemand von der $page = $_GET['page']-Schreibweise auf eine modulare Anwendungsbasis wechselt. Gerade weil ersteres schon ein Schritt in eine ganz andere Richtung ist.
Dass Designregeln wichtig sind, musst du mir bestimmt nicht sagen. Es get mir nur mehr darum, dass ich bei der fraglichen Codezeile nicht denke: „Warum wird die Funktionalität nicht in einer Funktion / einem Objekt durchgeführt?“ sondern grunsätzlich mal „Warum so umständlich?“
Letztendlich sehe ich darin auch den Weg zu besserem Stil. Designregeln und Standards haben keinen Sinn, wenn sie nicht verstanden werden.
Zitat
Somit arbeitet man im Modul sowieso mit einem anderen Namen. Wenn man es noch eleganter macht, ist die Seite ein riesiges Objekt. Somit hat sich die ganze Geschichte sowieso erledigt.
Wie frage ich am besten ab, ob eine URL, bzw. ein Pfad existiert, bzw. in einem Ordner überhaupt etwas enthalten ist?
...
Ich hoffe, dass zweiteres immer funktioniert, alternativ kannst du noch prüfen, ob scandir($dir) als 1. und 2. Element wirklich nur "." und ".." enthält.
--
A human is a system for converting dust billions of years ago into dust billions of years from now via a roundabout process which involves checking email a lot.
Sieht schöner aus, ist stilistisch besser und vorallem kürzer.
...
Diese Variante braucht ein paar tausend Sprünge weniger, und ist zu bevorzugen. Mit ein paar Tausend meine ich tatsächlich eine ganz kleine Anzahl, die wirklich minimal ist.
--
"When I was in college, there were certain words you couldn't say in front of a girl," "Now you can say them, but you can't say 'girl." - Tom Lehrer