Simone: $GET Variablen in Funktionen ausgeben

Hallo,

habe jetzt schon ewig rumprobiert. Ich dachte $_GET und $_POST Variablen bzw. arrays wären global, also auch in Funktionen gültig. Aber wenn ich eine per Post oder Get übergebene Variable in einer selbstdefinierten Funktion ausgeben will, geht's nicht. (Außerhalb einer Funktion schon). Weder mit: echo $Variable;
noch so:
echo $_GET ["Variable"];

Bin ratlos,

Simone

  1. Hallo Simone!

    $_Get und $_Post sind SuperGlobals.
    Funktionen haben ihren eigenen Variablen-Definitionsraum.
    Du musst die Variablen mit "global $variable" in der Funktion bekannt geben oder
    beim Aufruf übergeben.
    (PHP Variablen-Gültigkeit guckt immer von unten nach oben)

    Gruss
    Rainer

    1. Hallo Rainer,

      $_Get und $_Post sind SuperGlobals.

      Nein, $_GET und $_POST sind SuperGlobals. Ansonsten stimmt das :)

      Funktionen haben ihren eigenen Variablen-Definitionsraum.

      Das ist auch richig.

      Du musst die Variablen mit "global $variable" in der Funktion bekannt geben oder
      beim Aufruf übergeben.

      Das ist ebenfalls richtig.
      Allerdings sind $_GET, $_POST, $_SERVER, $_COOKIE sowie $_SESSION, wie Simone (und Du) schon richtig erwähnt hat, SuperGlobals und
      damit in _allen_ Variablenräumen vorhanden[1]. Auch in denen von
      Funktionen.
      Man muss also in selbstdefinierten Funktionen diese Arrays _nicht_
      extra mit global bekanntmachen - sie sind es bereits.

      Bei mir funktioniert folgender Code jedenfalls Problemlos, d.h. er
      gibt z.B. bei einem Aufruf von "<scriptname>.php?foo=bar" "foo : bar"
      aus (Hab's jetzt nur mit $_GET versucht, ist ja schon spät *g*).

      <?php

      function printGlobals()
      {
          foreach($_GET as $key => $val) {
              echo $key." : ".$val."<br />\n";
          }
      }

      printGlobals();

      ?>

      [1] http://www.php.net/manual/en/printwn/language.variables.predefined.php#language.variables.superglobals

      Gruß,
      dimde

      1. Hallo dimde!

        alles soweit OK!
        um noch mal konkreter auf Simones Posting zurück zu kommen (hätte ich gleich machen sollen ;):

        echo $Variable; /* geht nicht */
         echo $_GET ["Variable"]; /* geht auch nicht */
        aber
         echo $_GET ['Variable']; /* muesste gehn */
         $Variable = $GET['Variable']; echo $Variable; /*muesste auch gehen */

        und
         $Variable = "blabla"; /* verändert den Wert des array-elements nicht */

        d.h.:
        Das array $_GET ist zwar in der Funktion bekannt, 'Variable' ist aber nur der Pointer!
        Die Variable muss im Namensraum der Funktion erst bekannt gemacht werden.

        Ist wohl das gleiche was Du sagst - nur mit anderen Worten.
        Habe es nicht getestet und wüste gerne ob ich damit richtig liege!?

        Gruss
        Rainer

        1. Hallo Rainer,

          echo $Variable; /* geht nicht */

          Kommt drauf an, wo du $Variable definiert hast.

          function bla()
          {
              $Variable = $_GET['Variable'];
              echo $Variable;
          }

          funktioniert natürlich, wohingegen

          $Variable = $_GET['Variable];
          function bla()
          {
              echo $Variable;
          }
          nicht das gewünschte Ergebnis liefert.

          echo $_GET ["Variable"]; /* geht auch nicht */

          Sollte es eigentlich schon. Allerdings darf (vielleicht geht es
          sogar, aber es ist kein guter Stil) kein Leerzeichen zwischen
          "$_GET" und "[" stehen.

          aber
           echo $_GET ['Variable']; /* muesste gehn */

          Solange Du keine Variablen in dem String hast, ist das genau das
          gleiche wie $_GET["Variable"].

          $Variable = $GET['Variable']; echo $Variable; /*muesste auch gehen */

          $_GET['Variable'].
           ^

          $Variable = "blabla"; /* verändert den Wert des array-elements nicht */

          Genau.

          d.h.:
          Das array $_GET ist zwar in der Funktion bekannt, 'Variable' ist aber nur der Pointer!

          Nein.
          Wenn Du sowas machst "$Variable = $_GET['Variable];" dann ist
          $Variable eine _Kopie_ von $_GET['Variable'].

          Einen Pointer legst Du so an "$Variable = &$_GET['Variable'];". Wenn
          Du dann $Variable einen anderen Wert zuweist "$Variable = "bla";",
          dann hat $_GET['Variable'] den neuen Wert (bla), weil hier
          ja $Variable nur auf $_GET['Variable'] _zeigt_ und selber keinen
          Wert hat.

          Habe es nicht getestet und wüste gerne ob ich damit richtig liege!?

          Hoffe ich konnte Dir helfen und hab selber keinen Denkfehler
          reingebracht :)

          Gruß,
          dimde