PHP Link geklickt - Neue Seite soll geladen werden: Mit header() oder include() umsetzen?

Jack159

Lieutenant
Registriert
Dez. 2011
Beiträge
766
Hallo,

Ich nutze Clean-URL's und eine Router-Funktionalität in meinem Projekt. Jede Request wird auf die index.php geleitet.
Wenn ich jetzt auf meiner Seite beispielsweise auf "Home" klicke, wie soll dann die "Home"-Seite geladen werden?
- Mit include("bla/home.php)"?
- Oder mit header ("Location: http://bla.de/home.php")?

Falls mit Variante 1 (include()):
Wie realisiert man denn hier, dass die URL stets aktuell ist? Denn wenn ich z.B. derzeit auf der Login-Seite bin, dann auf den Login-Button klicke, dann wird der Parameter "checkLogin" an die Index geschickt, welche dann die checkLogin() Methode ausführt und anschließend die home.php inkludiert. Es öffnet sich dann zwar die Home-Seite, allerdings steht in der URL dann noch als Parameter "checkLogin".


Falls mit Variante 2 (header()):
Wie kann denn dann noch überhaupt das Templating von header und footer funktionieren?
Denn dafür nutze ich bisher immer folgende Variante:

PHP:
<?php
   include "$GLOBALS[root]/view/header.html";
?>

<!-- html zeugs.... -->

<?php
   include "$GLOBALS[root]/view/footer.html";
?>

Wenn ich aber nun header() benutze, dann wäre in dem Fall ja $GLOBALS['root'] bzw. der Index 'root' garnicht bekannt, da ja bereits ein neuer Request angefordert wird. Das ganze endet also mit einer Fehlermeldung...


Ich hoffe ihr versteht was mein Problem ist.
 
Will Dir dein Projekt nicht madig machen. Gerade wenn es ums Login geht, baut man gerade als Anfänger Sicherheitslücken ohne Ende ein. Besorg dir ein gutes PHP Lernbuch oder schau dir ein gutes Lernvideo an, um dir erstmal die Grundlagen einzuverleiben. Probier kleine Projekte aus. Dann kannst dich an die fortgeschrittenen Themen wie Templates, Sessions und Security auseinandersetzen.
 
Jack159 schrieb:
Wenn ich jetzt auf meiner Seite beispielsweise auf "Home" klicke, wie soll dann die "Home"-Seite geladen werden?
- Mit include("bla/home.php)"?
- Oder mit header ("Location: http://bla.de/home.php")?

Weder noch. Seiten sind baumförmige Datenbank-Einträge. Seiten haben Layouts. Seiten haben Aliase. Der GET-Parameter deiner index.php, z.B. index.php?page=home, fungiert als Suchbegriff für die Seiten-Aliase. Über den Eintrag der Seite in der Datenbank erhälst du alle Informationen über das zu ladende Layout/Template, die zu ladenden Inhalte,....
 
Schick ist das ganze per Ajax zu realisieren :)
Also Content nachladen ohne "Reload".

Aber be careful! Es gibt viele sicherheitsrelevante Aspekte beim Login bzw. generell, die beachtet werden müssen (s. sasdensas).
 
Daaron schrieb:
Weder noch. Seiten sind baumförmige Datenbank-Einträge. Seiten haben Layouts. Seiten haben Aliase. Der GET-Parameter deiner index.php, z.B. index.php?page=home, fungiert als Suchbegriff für die Seiten-Aliase. Über den Eintrag der Seite in der Datenbank erhälst du alle Informationen über das zu ladende Layout/Template, die zu ladenden Inhalte,....

Du schlägst also für jeden Request eine DB-Abfrage vor O.o
 
hier ein beispiel, warum es von vorteil ist wenn diese informationen in einer datenbank stehen:

du erstellt eine webanwendung welche folgende seiten hat:
- home
- artikel-überischt
- artikel-detail
- impressum
- disclaimer

das alles kannst du auch wunderbar zum laufen bringen, indem du das ganze in deinem php code definierst.
jetzt erweitere deine seite aber bitte mal dahingehend, dass du eine weiter lokalisierung hinzufügst...wie du jetzt hoffentlich bemerkst musst du für jede seite eine weiche programmieren - natürlich unter der annahme das du lokalisierte urls hast [z.b. /news/].

eine erweiterung der seite funktioniert also nur indem du in deinem code rumwerkelst, obwohl es sich bei den seiten um gleichartrige handeln.

ergo wäre es von vorteil wenn du den seiten z.b. ein page label zuordnest. anhand dessen lädst du dein controller, modell, view etc. daraus ergibt sich, dass du deinen code nur noch ändern musst wenn du eine neue, strukturell andere, seite hinzufügen willst [ein neues page label].
der anwender hingegen kann beliebig viele seiten hinzufügen und diese in beliebig viele sprachen lokalisieren - ohne das am code etwas geändert werden muss.

darüber hinaus gibt es seiten, welche komplett gleich behandelt werden und sich lediglich vom inhalt unterscheiden [z.b. impressum & disclaimer]. wieso sollte man also nicht für beide das exakt gleiche model etc benuzten?

das war jetzt wirklich nur ein sehr einfaches beispiel und ich hoffe du verstehst jetzt aus welchem grund eine datanbank hierfür sinn ergibt
 
xSeppelx schrieb:
Schick ist das ganze per Ajax zu realisieren :)
Also Content nachladen ohne "Reload".
Kann man machen, aber nur wenn man sich die Mühe macht
a) dieselben Daten auch ohne JS bereit zu stellen
b) mit Hashbangs und der History-API zu arbeiten

Jack159 schrieb:
Du schlägst also für jeden Request eine DB-Abfrage vor O.o
Na was denkst du, wie jedes leidlich brauchbare CMS das macht? Was ist daran so überraschend? Wie lange dauert es, "SELECT * FROM pages WHERE alias='unterseite'" auszuführen? Wie lange dauert es, wenn dieser Query noch einmal ausgeführt wird?
 
Zurück
Oben