Tom: Testscript erläutern

Beitrag lesen

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 :-)