@robydog: In welcher Sprace proggst Du denn? echo: , keine $ in den Variablennamen...
Kleiner Exkurs:
Es gibt mehrere Möglichkeiten, eine Bedingung zu verarbeiten.
Klassisch:
Wächter statt Verschachtelung:
Dieses Beispiel funktioniert nur mit einem Abbruchstatement, z.B.: break bzw. continue aus einer Schleife, return aus einer Funktion, Methode oder einer include Datei, Scriptabbruch mit exit oder die.
Informationen findest Du auch hier: FAQ der Newsgroups de.comp.lang.php.* - 27.1.*Halte Code links. Verwende Wächter statt Schachtel-if
2. Exkurs:
msyql_real_escape_string ist nicht irgendein magisches Ding, dass vor SQL Injection schützt, sondern dient einzig dazu, in einem String Hochkommata und ähnlichen Zeichen ein Escapezeichen voranzustellen. Ähnlich wie addslashes, allerdings Darenbank-abhängig.
Wenn Du darüber nachdenkst, merkst Du, dass eine solche Funktionalität hier nicht die Sicherheit erhöhen kann.
Zurück zum Thema:
Kleines Bsp.
Deine Anwendung hat 2 Seiten page1.php und page2.php, Dazu eine error.php und den Controller in index.php. Statt die einzelnen Seiten aufzurufen, rufst Du immer index.php auf, welche wiederum die jeweilige Seite per include einbindet. Bei ungültigen Aufrufen wird error.php eingebunden.
Wichtig: Die einzelnen Seiten geben die Inhalte nicht direkt aus, sondern liefern sie an die index.php zurück. Dort können Sie bspw. einheitlich verarbeitet und formatiert werden. Schließlich folgt die Ausgabe.
index.php
Ich nutze bewußt ein assoz. Array, um die Seiten von den Aufrufen unabhängig zu machen. So könnte man bspw. den Eintrag 'home' => 'page1.php' ergänzen und hätte damit ein Alias für die Startseite. Das gleiche Prinzip nutzt der default Eintrag, der für nicht angegebene Parameter auf die Startseite verweist.
Die Array-Schlüssel bestehen nur aus Kleinbuchstaben, so kann ich den Get Parameter mit strtolower behandeln und bin beim Seitenaufruf unabhängig von der Schreibweise.
Momentan erwartet der Controller eine Angabe der Art index.php?page=Start
Das Sahnehäubchen ist noch die Verwendung von mod_rewrite, mit dem Du Angaben wie Start.html oder Impressum.html auf den Controller umleiten kannst. Die entsprechenden html Dateien müssen dafür gar nicht existieren, sie werden vor Abarbeiten der php Dateien in die Angabe index.php?page=Start bzw. index.php?page=Impressum umgewandelt.
Aber das ist einen anderen Thread wert...
[edit]
Nachdem ich schon öfter hierauf verwiesen habe, fällt mir gerade ein Logikfehler auf.
Korrektur:
Kleiner Exkurs:
Es gibt mehrere Möglichkeiten, eine Bedingung zu verarbeiten.
Klassisch:
PHP-Code:
if ($bedingung) {
// positiv Zweig
}
else {
// negativ Zweig
}
PHP-Code:
if ($bedingung) {
// positiv Zweig
// Abbruchstatement
}
// negativ Zweig
Informationen findest Du auch hier: FAQ der Newsgroups de.comp.lang.php.* - 27.1.*Halte Code links. Verwende Wächter statt Schachtel-if
2. Exkurs:
msyql_real_escape_string ist nicht irgendein magisches Ding, dass vor SQL Injection schützt, sondern dient einzig dazu, in einem String Hochkommata und ähnlichen Zeichen ein Escapezeichen voranzustellen. Ähnlich wie addslashes, allerdings Darenbank-abhängig.
Wenn Du darüber nachdenkst, merkst Du, dass eine solche Funktionalität hier nicht die Sicherheit erhöhen kann.
Zurück zum Thema:
Kleines Bsp.
Deine Anwendung hat 2 Seiten page1.php und page2.php, Dazu eine error.php und den Controller in index.php. Statt die einzelnen Seiten aufzurufen, rufst Du immer index.php auf, welche wiederum die jeweilige Seite per include einbindet. Bei ungültigen Aufrufen wird error.php eingebunden.
Wichtig: Die einzelnen Seiten geben die Inhalte nicht direkt aus, sondern liefern sie an die index.php zurück. Dort können Sie bspw. einheitlich verarbeitet und formatiert werden. Schließlich folgt die Ausgabe.
index.php
PHP-Code:
// Schlüssel für den GET Parameter
$key = 'page';
$pages = array (
'start' => 'page1.php' ,
'impressum' => 'page2.php' ,
'default' => 'page1.php' ,
'error' => 'error.php');
if (empty ($_GET[$key])) {
// kein oder leerer Parameter angegeben
// nutze Standardwert
$open = 'default';
}
else {
// prüft Existenz im Seiten Setting, bei Fehlen wird der error Eintrag genutzt
$open = (false === array_key_exists ($open , $pages))
? 'error'
: strtolower ($_GET[$key]);
}
// Aufruf der Sub Datei, diese muß den Inhalt per return zurückgeben
// hier könnte auch eine Funktion aufgerufen oder der output Buffer verwendet werden
$content = include ($pages[$open]);
// verarbeite $content
// Ausgabe (vereinfacht)
echo '<html><body>';
echo $content;
echo '</body></html>';
Die Array-Schlüssel bestehen nur aus Kleinbuchstaben, so kann ich den Get Parameter mit strtolower behandeln und bin beim Seitenaufruf unabhängig von der Schreibweise.
Momentan erwartet der Controller eine Angabe der Art index.php?page=Start
Das Sahnehäubchen ist noch die Verwendung von mod_rewrite, mit dem Du Angaben wie Start.html oder Impressum.html auf den Controller umleiten kannst. Die entsprechenden html Dateien müssen dafür gar nicht existieren, sie werden vor Abarbeiten der php Dateien in die Angabe index.php?page=Start bzw. index.php?page=Impressum umgewandelt.
Aber das ist einen anderen Thread wert...
[edit]
Nachdem ich schon öfter hierauf verwiesen habe, fällt mir gerade ein Logikfehler auf.
Korrektur:
PHP-Code:
if (empty ($_GET[$key])) {
// kein oder leerer Parameter angegeben
// nutze Standardwert
$open = 'default';
}
else {
$open = strtolower ($_GET[$key]);
// prüft Existenz im Seiten Setting, bei Fehlen wird der error Eintrag genutzt
if (false === array_key_exists ($open , $pages))
$open = 'error';
}
}
Kommentar