register_globals - ich raffe das einfach nicht :(
backbone
- php
0 Henning0 Rouven0 Thomas Tschernich0 backbone
hi folks,
ich habe mir jetzt schon zich beiträge im archiv dazu druchgelesen und ich verstehe einfach nicht wie ich das mit den tollen variabeln regeln soll wenn ich globale variabeln deaktiviert habe.
kann mir vielleicht jemand nochmal ne privaterklärung für einen extradummen bringen oder ist das wirklich so schwer zu verstehen?
(beispielcode würde auch weiterhelfen (mit kommentaren))
schonmal danke im voraus
tschau
ps: bitte keine sinnlosen verweise aufs archiv. alles was da stand hat mir nicht wirklich viel gebracht. u.a.: http://forum.de.selfhtml.org/archiv/2003/3/40235/#m220566
Hallo,
also hier die hoffentlich DAU sichere Methode:
Bisher hast du folgendes gemacht:
z.B.:(GET-Methode)
<a href="example.php?Variablenname=Wert">
und dann in PHP:
<?php echo $Variablenname; ?>
Jetzt machst du folgendes:
z.B.:(GET-Methode)
<a href="example.php?Variablenname=Wert">
und dann in PHP:
<?php
$Variablenname=$_GET["Variablenname"];
echo $Variablenname;
?>
Bei Post benutzt du stattdessen $_POST["Variablenname"]
analog $_SESSION usw.
Gruß,
Henning
Morgen!
Also im Prinzip ist die ganze Sache nicht so wild. Früher, wenn du ein Formular mit einem Textfeld namens "meintext" abgeschickt hast, dann kam in deinem Zielskript immer eine Variable $meintext an. Leider haben die Leute Methoden gefunden damit Skripte zu manipulieren, hacken etc. - Beispiel?
Im Skript steht:
if ($passwort = passwort) { $login = true; }
if ($login) { echo "willkommen, sie sind drin"; }
Würde ich dieses Skript aber aufrufen 'skriptname.php?login=true' wär ich vermutlich drin...
Daher wurde beschlossen, Skriptvariablen und Formular-Variablen zu trennen. Wenn du register_globals auf OFF hast, dann kannst du nun die Variable $login benutzen, sie wird aber NIEMALS von einem Formular belegt, weder über die URL noch über ein POST.
Um aber eben diese beiden Quellen zu berücksichtigen, verwendet man die Superglobals $_GET (GET-Formulare und URL-Parameter) und $_POST (POST-Formulare).
$internevariable = $_GET['externevariable']
Um es am Beispiel von oben zu machen:
1. POST
<form method="post" action="myscript.php">
<input type="text" name="meintext">
</form>
--> myscript.php
$inhalt_des_textfeldes = $_POST['meintext'];
2. GET
<form method="post" action="myscript.php">
<input type="text" name="meintext">
</form>
--> myscript.php
$inhalt_des_textfeldes = $_GET['meintext'];
---------
Noch eine Anmerkung: Auch wenn es theoretisch möglich ist die Variable $meintext im myscript.php zu verwenden würde ich ernsthaft davon abraten. Kaum landest du mal auf einem Server der noch register_globals on hat hast du einen Fehler den du länger suchst - glaub mir, ich weiß das....
MfG
Rouven
Ok ich probiers mal *g
<?php
while ($a<10) {
echo "hello world";
$a++;
}
?>
Im Normalfall würde das auch 10 mal "hello world" ausgeben. Ruft aber nun jemand das Script mit dem Querystring "?a=5" auf, wird der Text nur 5 mal angezeigt. Mit "register_globals on" alleine passiert der Fehler aber nicht, in diesem Beispiel ist zusätzlich noch der "absichtliche" Fehler eingebaut, die Variable nicht zu initialisieren. For die Schleife gehört normalerweise ein "$a=0;". Ein entsprechend eingerichtetes PHP würde auch diesen Fehler der Notice-Klasse anzeigen.
Wie gesagt, klingt ziemlich banal, aber ich kann mich an heftige und sehr gefährliche Bugs z.B. bei älteren Versionen des vBulletins erinnern, die auf dieser Einstellung beruhen.
Zusammenfassend heißt das, dass Programmieren mit register_globals off vielleicht etwas umständlicher, dafür aber sicherer, standard-konformer und da PHP weniger zu tun hat, auch schneller ist.
guten abend nochmal...
also das sind alles drei zusammen erklärungen mit denen der kleine marcus auch mal was anfangen kann ;). ich mein, vorher habe ich auch schon verstanden warum das denn so tolle ist register_globals auf off zu setzen doch jetzt weiss ich auch wie ich $_GET, $_POST etc. einsetzen kann.
also ein dickes dankeschön an die drei erklärungen.
gut nacht @ all.