Hello,
habe ich das prinzipiell richtig verstanden, dass eine übergabe eines wertes an eine variable über einen link und ?=irgendwas nur geht, wenn register globals on ist?
Wenn Du in der URL Parameter der Form
?param=wert
übergibst, dann kommen die bei heute typischer Konfiguration von PHP im "superglobalen Array" $_GET an als
$_GET['param'] ==> wert
PHP hat sie für Dich schon passend url-decoded
und leider meistens mit sogenannten "Magic Quotes" behandelt.
http://de.php.net/manual/en/security.magicquotes.php
Von den ""superglobalen Arrays" gibt es noch mehr.
http://de.php.net/variables.predefined
Die magic Quoters würde ich ausschalten. Sonst muss man sie i.d.R. wieder entfernen, um mit den Daten im Script arbeiten zu können.
Die Elemente der Superglobalen Arrays kann ganz normal im gesamten Script als Variablen verwenden. Sie sind in allen Scopes (Gültigkeitsbereichen) verfügbar. Einziger Wermutstropfen ist, dass man sie in Strings ,it Doppelhäkchen nicht einfach so zur Ersetzung einsetzen kann
echo "Der GET-Parameter mit dem Namen 'name' lautet {$_GET['name']}.";
man muss immer noch eine Extralage geschweifte Klammern spendieren, oder den String zusammensetzen
echo "Der GET-Parameter mit dem Namen 'name' lautet " . $_GET['name'] . ".";
was meisten ohnehin notwendig ist, weil man die Werte ja auch noch kontexrtbezogen (also für HTML) vorbehandeln muss.
echo "Der GET-Parameter mit dem Namen 'name' lautet " .
htmlspecialchars($_GET['name'],ENT_QUOTES) . ".";
Die Einstellung "Register Globals = ON" solltest Du lieber ganz schnell vergessen. Das ist ein Relikt aus der Anfangszeit von PHP, als man es noch chic fand, die Daten aus allen Quellen (GET, POST, COOKIE, ...) möglichst sofort und handlich im Script zur Verfügung zu haben. Leider verliert man dabei den Herkunftsbezug, denn alle request-Methoden haben ihre Werte jeweils auf derselben Variable abgeliefert.
$name kam aus dem Formular mit <input type="text" name="name" ...>,
das mit Post abgeschickt wurde
$name kam aus dem Cookie
$name kam aus der URi mit ?name=paul
und alle haben sich gegenseitig überschrieben.
Das gemeine war aber, dass auf diese Weise auch Scriptvariablen eingeschleust werden konnten. Hatte man also vergessen, die Variablen zu initialisieren, was ja bei PHP nicht unbedingt erforderlich ist, dann war die Sicherheitslücke meisten aufgerissen
Also, arbeite fröhlich mit
register_globals = off;
magic_quotes_gpc = off;
Dann wird es schon klappen.
jetzt hätte ich noch eine bitte: könntest du dein script nochmal auf etwaige schreibfehler etc. durchsehen, damit ich beim testen und lernen mir nicht stundenlang den kopf über einen flüchtigkeitsfehler zerbrechen muß, bzw. das forum hier nerve, obwohl das script im prinzip richtig ist?
Das machen wir hier gemeinsam.
Ich habe Dir ja das Errorreporting am Anfang eingeschaltet, sodass Du eigentlich jede Notice bekommen solltest. Wenn also ein fehler auftritt, dann melde dich und poste die Fehlermeldung.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)