backbone: register_globals - ich raffe das einfach nicht :(

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

  1. 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

    --
    Gruß aus Braunschweig
    SELF-Code: sh:( fo:| ch:{ rl:( br:> n4:( ie:( mo:) va:) de:] zu:} fl:( ss:| ls:<
  2. 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

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
  3. Ok ich probiers mal *g

    1. register_globals on
      Alle Variablen, die über die URL (also per GET), per Formular (POST) oder cookies (COOKIE) an dein Script übergeben werden, stehen automatisch als globale Variablen zur Verfügung. D.h. wenn zum Beispiel jemand dein Script mit dem Querystring (das is das was hinter den Dateinamen im Adressfenster hängt) "?testvar=value" aufruft, hast du im Script sofort die Variable $testvar mit dem Wert "value". Das mag jetzt gut klingen, ist es aber nicht. Mal angenommen du willst mit einem Script 10 mal "hello world" ausgeben lassen. Is ein banales Beispiel, reicht aber. Dein Script sieht vielleicht so aus:

    <?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.

    1. register_globals off
      Hier kann das von vorneherein nicht passieren. Die Variablen, die per GET, POST und COOKIE kommen stehen nicht automatisch im globalen Scope sondern müssen über $_GET["variablenname"], $_POST bzw. $_COOKIE angesprochen. $_REQUEST ist eine Zusammenfassung dieser 3 Variablen. Diese 4 Variablen (und noch einige andere) sind superglobal, d.h. sie stehen dir in jeder selbst zusammengeschusterten Funktion oder Klasse automatisch zur Verfügung und müssen nicht wie normale Variablen erst globalisiert werden.

    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.

  4. 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.