Klickt ein User auf den Link "?content=start", so sagt er ja dem Server, dass die Variable Content den Wert "start" annimmt.
Jetzt handelt der Server, beispielsweise nach dem if-Schema, also "wenn die Variable Contetnt den Wert "start" annimmt, dann inkludiert er die start.php an die entsprechende Stelle.
Also steuert man die verschiedenen Inhalte an, indem man per Klick auf einen Link die Variable Content ändert, und der Server demntsprechend reagiert.
Achja und Autoglobals?
Damit arbeite ich gar nicht.
Ich hole mir den Wert von Content einfach mit GET.
Also $content=$_GET["content"];
So und wenn ich ohne dieses System arbeiten würde, so würde ich ganz einfach den Link auf "start.php" setzen.
Allerdings müsste ich auf diese Weise sämtliche Strukturen implementieren.
Also jede einzelne Datei per HTML ein Menü, einen Header, einen Footer, etc. einbringen - und diese Methode ist definitiv zu arbeitsaufwändig, vorallem, wenn sich das Menü mal ändern sollte.
In diesem Fall müsste man Änderungen in sämtlichen Dateien vornehmen.
Und ich dachte mir eben, dass diese letzte Variante eben mit Templates funktionieren würde.
Leider fehlt mir da momentan noch der Durchblick.
Um die Sache verständlicher zu machen ein kleines Beispiel:
Da wäre die Datei "/inhalt/omgrofl.html"
Eine weitere Datei wäre die normale "inhalt/lamor.html"
Index.php
Wie man sieht sollen Standardmäßig die Inhalte der "lamor.html" zu sehen sein.
So, meine Frage hierzu:
Wie muss der PHP Code der index.php aussehen, und wie der Inhalt der "lamor.html" und der "omgrofl.html" ?
Ob du jetzt in der index.php ne Abfrage machst, ob $content === "start" oder ob du in der start.php einfach nur den Kram hast, der nach der Abfrage ausgeführt würde, kommt ja dann aufs gleiche raus.
Mit Jeez' Variante könnte man etwa so verfahren:
contact.php
about.php
Das hat zwar den Nachteil, dass ein paar Zeilen doppelt sind, aber dafür hat man ordentliche Links.
Übrigens noch ein kleines Beispiel, wie das mit Mannis Klasse aussehen könnte:
start.tpl (Endung kann natürlich auch anders sein)
navigation.tpl
start.php
setup_template.php
navigation.php
Dazu drei Anmerkungen:
Es sieht mit den vielen Dateien ziemlich umständlich aus, aber davon muss man pro Seite nur zwei (z.B. start.tpl und start.php) schreiben
Die setup_template.php kann man sich sparen, indem man nur die Templates lädt, die man braucht, aber ich lass aus Bequemlichkeit immer alle laden, die sich im entsprechenden Verzeichnis befinden.
Mannis Klasse erlaubt foreach-Schleifen (<BLOCK!>), Bedingungen (<IF!>, <ELSE!>) und Includes (<INCLUDE!>) und ist damit sehr flexibel.
Ins Input schreibe ich 1'"; $abfrage="DELETE FROM test"; //
...
Das wäre auch ein PHP Skript,d as du da absendest, so geht das nicht! Die Injection geschieht ja innerhalb einer Zeichenkette, die als Query asgeführt wird.
Eine Injection müsste so aussehen: 1'; DELETE FROM `test` WHERE '1'='1
Damit lautet die Abfrage:
Womit du zwei funktionsfähige Queries hast.
PHP lässt es aber nicht ganz so einfach zu:
Magic Quotes escapen einige Sonderzeichen. Diese Einstellung ist sehr oft aktiviert, fällt aber in der nächsten Version von PHP weg. Dann ist die Einstellung unveränderlich deaktiviert, d.h. keine maskierung mehr.
MySQL-Sicherheitsmechanismus: Nur eine Abfrage kann innerhalb von mysql_query() ausgeführt werden. Wiege dich da aber nicht in Sicherheit, das ist kein Schutz. Vor allem wenn die Magic Quotes bald deaktiviert werden.
MySQL-Sicherheitsmechanismus: Nur eine Abfrage kann innerhalb von mysql_query() ausgeführt werden. Wiege dich da aber nicht in Sicherheit, das ist kein Schutz. Vor allem wenn die Magic Quotes bald deaktiviert werden.
...
Yup. Man kann nämlich auch aus zwei Abfragen einfach eine Abfrage mit zwei Unterabfragen machen. SQL ist ziemlich mächtig.
Ehrlich gesagt hab ichs mit deiner Methode auch schon versucht, allerings ohne WHERE bei DELETE.
Hat mich zu keinem Erfolg geführt, und deshalb habe ich die Variante mit dem PHP Script versucht.
Hing vllt an den von dir erwähnten Sicherheitsmaßnahmen.
*Edit*
Nein, so funktioniert es nicht.
Selbst dann nicht, wenn ich den Code per Hand ins Script schreibe.