Komplette Website in PHP erstellen

Hallo.....

Da Du ein assoziatives Array angelegt hast, in dem die Schlüssel Deinem GET-Parameter entsprechen (sollten), geht das z.B. mit array_key_exists():

If(array_key_exists($_GET['s'], $s)) {
include($s[$_GET['s']);
} else {
include($s['news']);
}

Bei numerischen GET-Inhalten a la id=25 solltest Du mindestens auf numerisch prüfen:
if is_numeric($_GET['id']).....
ganz besonders, wenn Inhalte aus einer Datenbank kommen, sonst fängt man sich schnell eine SQL-Injection.

Fehlerbehandlungsroutinen nicht vergessen.....

Allerdings wäre bei Deiner Version in diesem speziellen Fall nicht groß was passiert, da sich Dein include auf einen nicht vorhandenen Schlüssel bezogen hätte, sofern man die URL manipuliert hätte. Hätte nur eine PHP Notice ergeben wg. 'undefined index'

Aber CornFreak hat grundsätzlich recht: Niemals URL-Parameter ohne Plausibilitätsprüfung includen! Du musst, traurige Wahrheit, immer vom "bösen" User ausgehen. Ich habe einige Seiten programmiert, bei denen ich mit eine Mail schicken lasse, sobald einer versucht, andere Inhalte in GETs zu verpacken als eigentlich vorgesehen. Da komme ich in Spitzenzeiten schon mal auf bis zu 50 Mails am Tag!

Die error-reporting Direktiven auch niemals auf einem Produktionsserver (der im Web)

Greetz cw
 
Hallo.

Also ich muss sagen das ich mich hier richtig wohlfühle. Vielen Dank erstmal an alle die mir hier weiterhelfen.
Hier wird man wenigstens nicht vollgelabert wenn man sich nicht auskennt.
 
Bekommen folgende Fehlermeldung wenn ich das einbinde:
PHP:
If(array_key_exists($_GET['s'], $s)) {
include($s[$_GET['s']);
} else {
include($s['news']);
}

Fehlermeldung: Parse error: syntax error, unexpected ';', expecting ']' in /www/htdocs/cspbere/website/index.php on line 38
 
chickenwing hat gesagt.:
Das ist die lustigste Abwandlung, die ich jemals gehört habe :D:D
Die meistens schreiben den zweiten Teil (Freek) klein oder mit ea.
Aber du: CornFreak
:D

Hier wird man wenigstens nicht vollgelabert wenn man sich nicht auskennt.
Eben tutorials.de ;)

Wo ist denn jetzt dein Problem? In deinem CSS-Code hast du doch richtig die Effekte verpackt.

Die error-reporting Direktiven auch niemals auf einem Produktionsserver (der im Web)
Ich würde auf einem Server im Web meine eigenen Errorhandler schreiben, der Fehler in der Datenbank protokolliert und dem Admin eine Mail zuschickt. Da ich jetzt sowieso den eigenen Errorhandler nutze, kann ich auch error_reporting(E_ALL); schreiben.
 
Grüße,

ich hab grad mal geschaut und folgendes bemerkt:

PHP:
include($s[$_GET['s']);

in dieser Zeile fehlt eine eckige Klammer. Es müsste also folgendermaßen aussehen:

PHP:
include($s[$_GET['s']]);

Schönen Abend noch.
 
Kann es sein das in die Zeile noch was rein kommt?
Bekomme diese Meldung:
Notice: Undefined index: s in /www/htdocs/cspbere/website/index.php on line 37

PHP:
If(array_key_exists($_GET['s'], $s)) {
 
Das ist die lustigste Abwandlung, die ich jemals gehört habe :D:D
Die meistens schreiben den zweiten Teil (Freek) klein oder mit ea.
Aber du: CornFreak
:D


Eben tutorials.de ;)

Wo ist denn jetzt dein Problem? In deinem CSS-Code hast du doch richtig die Effekte verpackt.


Ich würde auf einem Server im Web meine eigenen Errorhandler schreiben, der Fehler in der Datenbank protokolliert und dem Admin eine Mail zuschickt. Da ich jetzt sowieso den eigenen Errorhandler nutze, kann ich auch error_reporting(E_ALL); schreiben.

So nun zu deiner Frage.

Stimmt die CSS scheint richtig zu sein aber dadurch die php-Seiten ja nicht direkt aufgerufen werden sondern ja mit index.php?s= geholt werden scheint es ein Problem zu geben das die Links nicht auf activ gesetzt sind.
 
@ CornFreek
Sorry, kommt (wahrscheinlich) nicht wieder vor :D , wenngleich mit steigendem Lebensalter der Grad an Zerstreutheit nicht unbeträchtlich zunimmt.

@all

Uppss, sorry, da habe ich tatsächlich 'ne eckige Klammer übersehen :eek:

Ich meinte auch nicht error_reporting, sondern im ini_set die Anzeige der Fehler.

Fazit: Man (ich) sollte nicht Tips geben, während man sich parallel mir einem völlig anderen Thema befasst. Btw. wäre es immer gut, neben der Fehlerzeile auch den dazugehörigen Code dieser Zeile anzugeben, das vereinfacht die Korrektur immens. Es sei denn, es wird das Programmende angezeigt, dann hat man i.d.R. zwischendrin bestimmt ein ";" oder 'ne schließende Klammer vergessen.

Wenn Du die PHP-Notice "undefined index" erhältst, dann existiert (an der Stelle) Deine indexvariable (noch) nicht. Mögliche Ursache hier: Schreibfehler in der URL?

Mein (persönlicher) Tip: Ich prüfe GET-Parameter i.d.R. gleich am Anfang des Scripts auf Vorhandensein (wenn nicht, vorbelegen) und übergebe an aussagekräftigere Variablen (deren Sinn ich am Ende des Scripts auch noch erkenne), prüfe deren Plausibilität und arbeite im Rest des Scripts dann mit diesem Wert weiter. Bsp.:
PHP:
$seite='news.php'; // hier die Seite, die beim Fehlen eines passenden Parameters angezeigt werden soll
$get_menupunkt=isset($_GET['s']) ? strtolower(trim($_GET['s'])) : 'news'; // strtolower usw. falls z.B. einer die URL von Hand eingegeben hat

if(array_key_exists($get_menupunkt, $s)) {
$seite=$s[$get_menupunkt];
} else {
$get_menupunkt='news'; // Falls man den Wert noch weiterverwenden will
// $seite wurde am Anfang initialisiert
}
include($seite);
Im o.g. Bsp. sollte es im errorlog zu keinem undefined index mehr kommen, egal, wie sehr in der URL auch 'rumgepfuscht' wurde. Wenn man seine Variableninhalte (auf die preisgünstigste, althergebrachte Weise) sehen will, wird man um ein kurzfristiges 'echo' an passender Stelle nicht herumkommen... In dem Fall (und noch einigen anderen) solltest Du vielleicht mal intensiv über einen lokalen Server auf Deinem Rechner nachdenken (XAMPP als Komplettpaket wäre hier zu empfehlen)

O.g. Bsp. hat neben der Vereinfachung möglicher Klammerorgien zudem den Vorteil, dass, wenn man mal, warum auch immer, die Parameterbezeichnung ändern will (z.B. "s" zu "menu"), eine Korrektur nur an einer Stelle zu machen hat. Ausserdem muss die Gültigkeitsprüfung auch nur einmalig vorgenommen werden. Natürlich kann man auch die GET-Variable selbst manipulieren, z.B. $_GET['s']='neuer Wert'), aber das ändert ja nichts in Richtung vereinfachter Schreibweise.
Und als oberfaule Socke würde ich die Arrayzuweisung auch noch kürzen:
$s=array("news"=>"news.php", "kontakt"=>"kontakt.php", ......)

Aber das ist ja nicht das Thema. Sorry, wenn ich zu ausführlich geworden bin.

Greetz
cw
 
Zuletzt bearbeitet:
Sorry das ich erst jetzt schreibe aber meine Family und ich waren übers Wochenende mal weg.
Also erstmal noch vielen Dank an alle die hier zurückgeschrieben haben. Falls ich noch Probs haben sollte dann schreib ich wieder rein

CU
 
Zurück