Jens: Einlesen von Formulardaten Umgebungsvariable - wie heißt die?

Hallo.
Ich frage wahrscheinlich jetzt ziemlich blöd.
Beispiel: ich habe in einem Formular
<input type="text" name="user">
<input type="text" name="password">
und konnte dann im Script, welches die Daten empfängt, darauf mit
$user;
$password;
zugreifen.
Ab irgendeiner PHP-Version geht das wohl nicht mehr aus Sicherheitsgründen (was ja auch gut ist).
Ich habe auch schonmal irgendwo gelesen, wie es jetzt geht und wie die entsprechende Umgebungsvariable, die die Formulardaten beinhaltet, heißt. Ich habe nur vergessen wo und wie.
Wer kann mir auf die Sprünge helfen?
Danke!!!
Jens

  1. Hi Jens!

    Ja in neueren Versionen von PHP gehts das standardmässig so nicht mehr (kann man in der php.ini aber ändern 'register_globals=on') - die Frage ist, ob es nun sicherer ist - ich denke nicht, aber egal!

    es gibt nun mehrere Möglichkeiten z.B:

    die Assoziativen Arrays $HTTP_POST_VARS und $HTTP_GETT_VARS - je nach der Methode, die du zum versenden wählst-  nimm hierbei als key den namen des Elementes aus dem HTML - Formulars

    also z.B:

    in HMTL:
    <input type="text" name="email">

    ..dann kannst du in PHP mit $HTTP_POST_VARS["email"] darauf zugreifen

    alles dazu gibt es z.B. hier:

    http://www.dclp-faq.de

    Gruss Sven

  2. Hi,

    das kommt dauaf an mit welcher Methode Du das Formulat übersendest: GET oder POST.

    Per GET kommst Du über $_GET["variable"] an die einzelnen Felderinhalte und per POST über (wunder, wunder) $_POST.

    Gruss, Stefan

    1. hallo

      [..]

      Per GET kommst Du über $_GET["variable"] an die einzelnen Felderinhalte und per POST über (wunder, wunder) $_POST.

      oder so!  ich verwende aber häufiger die oben von mir genannten Arrays, weil ich noch immer Server mit einer PHP-Version antreffe, bei denen $_GET und $_POST (Perl lässt grüssen ;)...) noch nicht unterstützt werden..

      Sven

      1. Hi,

        oder so!  ich verwende aber häufiger die oben von mir genannten Arrays, weil ich noch immer Server mit einer PHP-Version antreffe, bei denen $_GET und $_POST (Perl lässt grüssen ;)...) noch nicht unterstützt werden..

        ich bin nicht ganz sicher, wie der Code explizit bei PHP lauten muss, aber vom Prinzip her:

        if (!defined $_GET)  $_GET  = $HTTP_GET_VARS;
        if (!defined $_POST) $_POST = $HTTP_POST_VARS;

        Cheatah

        1. hi

          ich bin nicht ganz sicher, wie der Code explizit bei PHP lauten muss, aber vom Prinzip her:

          if (!defined $_GET)  $_GET  = $HTTP_GET_VARS;
          if (!defined $_POST) $_POST = $HTTP_POST_VARS;

          mhh, noch einfacher wäre wohl

          if (!$_GET)$_GET = $HTTP_GET_VARS; <- wenn $_GET nicht definiert, wird es mit $HTTP_GET_VARS gefüllt...
          if (!$_POST)$_POST = $HTTP_POST_VARS; <- wenn $_POST nicht definiert, wird es mit $HTTP_POST_VARS gefüllt...

          alternativ kann man auch mit if(isset($_GET)) explizit nachfragen, aber ist nicht nötig.

          Fabian

          ps: ja, ich bin Effizienz-Fetischist ;-)

          1. Hi,

            ich bin nicht ganz sicher, wie der Code explizit bei PHP lauten muss, aber vom Prinzip her:
            mhh, noch einfacher wäre wohl

            naja, wie gesagt, ich war nicht ganz sicher über die Schreibweise bei PHP :-)

            ps: ja, ich bin Effizienz-Fetischist ;-)

            Dann solltest Du isset() verwenden, denn andernfalls wird im Falle keiner übertragenen Daten (was in einer der beiden Variablen in aller Regel der Fall sein sollte) ein leeres Array über ein anderes leeres Array gespeichert ;-) Zudem unterstelle ich, dass isset() effizienter ist, weil die Funktion bei der Prüfung einer Variable auf einen wahren Wert normalerweise ebenfalls aufgerufen werden muss - zusätzlich zur (wenn auch schnellen) Analyse des Inhalts.

            Cheatah

            1. hi

              ps: ja, ich bin Effizienz-Fetischist ;-)

              Dann solltest Du isset() verwenden, denn andernfalls wird im Falle keiner übertragenen Daten (was in einer der beiden Variablen in aller Regel der Fall sein sollte) ein leeres Array über ein anderes leeres Array gespeichert ;-) Zudem unterstelle ich, dass isset() effizienter ist, weil die Funktion bei der Prüfung einer Variable auf einen wahren Wert normalerweise ebenfalls aufgerufen werden muss - zusätzlich zur (wenn auch schnellen) Analyse des Inhalts.

              IMO nicht.
              in PHP gilt jeder wert ausser 0 (null), undefined und false als wahr, somit ist if(!$_GET) sehr wohl verwendbar. isset() würde ich verwenden, wenn ich wissen wollte, ob eine variable deklariert aber nicht initialisiert wurde.
              da $_GET _immer_ deklariert ist _kann_ es IMO zu problemen kommen, was aber dann auf schlampige Programmierung zurückzuführen wäre.

              Fabian

              1. Hi,

                in PHP gilt jeder wert ausser 0 (null), undefined und false als wahr, somit ist if(!$_GET) sehr wohl verwendbar. isset() würde ich verwenden, wenn ich wissen wollte, ob eine variable deklariert aber nicht initialisiert wurde.

                PHP muss dennoch zuallererst feststellen, ob die Variable existiert (also isset() ausführen), bevor der Wert mit 0, undefined und false verglichen werden kann - wobei ich mir (ungeprüft) recht sicher bin, dass auch '' und [] als unwahr gelten. Gerade letzteres ist von der Prüfung her nicht mehr unbedingt trivial.

                da $_GET _immer_ deklariert ist

                Je nach PHP-Version.

                _kann_ es IMO zu problemen kommen,

                Welche denn? Du willst doch gerade prüfen, ob die PHP-Version $_GET kennt. Wenn dem so ist, ist die Variable - wie Du selbst sagst - immer deklariert, während sie im negativen Fall weder deklariert ist noch einen Inhalt hat (logischerweise). Im Falle "bekannt aber leer" wird PHP nach der Prüfung auf "leer" ein mit $_GET identisches Array zu kopieren haben (bzw. einen Pointer neu setzen; für die Details bin ich nicht tief genug in PHP drin), was nun eine unnötige Aktion darstellt.

                Eher würde ich die Abfrage auf "if (isset($_GET) && $HTTP_GET_VARS)" erweitern, das könnte sich sogar als noch performanter erweisen.

                Cheatah

                1. hi

                  in PHP gilt jeder wert ausser 0 (null), undefined und false als wahr, somit ist if(!$_GET) sehr wohl verwendbar. isset() würde ich verwenden, wenn ich wissen wollte, ob eine variable deklariert aber nicht initialisiert wurde.

                  PHP muss dennoch zuallererst feststellen, ob die Variable existiert (also isset() ausführen), bevor der Wert mit 0, undefined und false verglichen werden kann - wobei ich mir (ungeprüft) recht sicher bin, dass auch '' und [] als unwahr gelten. Gerade letzteres ist von der Prüfung her nicht mehr unbedingt trivial.

                  ja, jetzt geht mir ein Licht auf... hatte isset() mit empty() verwechselt.

                  Je nach PHP-Version.

                  genau. wäre deswegen nicht _noch besser_ einfach die PHP-Version abzufragen und je nachdem dann $_GET oder wasauchimmer mit Predefined-Variablen zu belegen?

                  Eher würde ich die Abfrage auf "if (isset($_GET) && $HTTP_GET_VARS)" erweitern, das könnte sich sogar als noch performanter erweisen.

                  damit prüfst du ja, ob $_GET _und_ $HTTP_GET_VARS da sind. wenn ja, dann hast du sie halt beide. wenn nicht, was dann?

                  Fabian

              2. da $_GET _immer_ deklariert ist [...]

                Wir sollten den Sinn der beiden Zeilen code nicht aus den Augen verlieren, nämlich $_GET/$_POST für PHP <4.1.0 verfügbar zu machen[1].

                Wo gilt isset($_GET) immer? In PHP >=4.1.0. Dort müssen wir $_GET aber nicht mit $HTTP_GET_VARS füllen, wir können $_GET selbst verwenden.
                Wo gilt isset($_GET) nicht? In PHP <4.1.0. Dort müssen wir $_GET mit $HTTP_GET_VARS initialisieren, wenn wir $_GET als solches verwenden wollen.

                ergo: Wir verwenden isset();

                [1] $_GET/$_POST wird nie identisch mit $HTTP_GET_VARS/$HTTP_POST_VARS sein, da letztere keine superglobals sind.

                P.S.: Cheatahs Einwand ist berechtigt und korrekt. Es gilt !$_POST===true, wenn method="get". $_POST=$HTTP_POST_VARS; wird uneffizieterweise ausgeführt, obwohl $HTTP_POST_VARS leer ist (und $_POST vielleicht sowieso verfügbar ist, siehe oben).

                1. Nach all der Diskussion, brauchen wir jetzt nur noch eine Konsenusvereinbarung: Wie sorge ich am effektivsten dafur, dass ich Formulardaten in der Folgedatei zur Verfügung habe.

                  Also bitte, meine Herren :-).

  3. Hi,

    Ich habe auch schonmal irgendwo gelesen, wie es jetzt geht und wie die entsprechende Umgebungsvariable, die die Formulardaten beinhaltet, heißt.

    nicht Umgebungs-, sondern Systemvariablen, bei PHP auch PHP-Variablen genannt :-) Je nach Formular-Methode heißt diese $_GET oder $_POST.

    Ich habe nur vergessen wo und wie.

    Ich habe in der Doku nach drei Klicks http://www.php.net/manual/de/language.variables.predefined.php erreicht.

    Cheatah

    1. Hi Cheatah

      War mir klar, daß es so einfach ist. Vielleicht sollte man Samstag abends soch etwas anderes machen und dann ausgeschlafen an die Sache gehen.

      Ich sagte ja: auf die Sprünge helfen... ;-)

      Danke!

      Und Grüße
      Jens

      1. Hi,

        Vielleicht sollte man Samstag abends soch etwas anderes machen und dann ausgeschlafen an die Sache gehen.

        Moment mal, wie jetzt... es gibt noch etwas anderes, das man machen kann? ;-)

        Ich sagte ja: auf die Sprünge helfen... ;-)

        Oder auch "Brett vom Kopf kloppen". Brauchen wir alle ab und zu.

        Cheatah

  4. Bei Fragen zu Umgebungsvariablen: http://www.php.net/manual/de/function.phpinfo.php