Martin us Kölle: Variable über Formular übergeben

Hallo zusammen..

ich habe folgendes Problem:
Ich übergebe innerhalb eines Formular eine Variable
<input type="hidden" name="10" value="1" />
und versuche diese dann auf der nächsten Seite auszulesen
echo "->".$_REQUEST["10"]."";

Jedoch ist die Variable leer.

Hat wer spontan ne Idee woran das liegen könnte?

Danke schon mal im voraus!

  1. Hallo Martin,

    ich habe folgendes Problem:
    Ich übergebe innerhalb eines Formular eine Variable
    <input type="hidden" name="10" value="1" />
    und versuche diese dann auf der nächsten Seite auszulesen
    echo "->".$_REQUEST["10"]."";

    Geraten: Variablennamen dürfen nicht mit einer Ziffer beginnen oder nicht nur aus Ziffern bestehen!? http://www.php.net gibt bestimmt Auskunft darüber.

    ciao
    romy

      1. Da stehts genau: http://www.php.net/manual/de/language.variables.basics.php

        Und wo genau verwendet Martin eine nicht gültige Variable?

        Wäre gut, wenn du *(Martin) mal das gesamte Formular zitieren würdest:
        Wie werden die Formulardaten gesendet? POST/GET?
        Wieso verwendest du das veraltete $_REQUEST?
        Ist das action-Attribut des Formulars korrekt gesetzt?

        1. Hallo Jeremy,

          Da stehts genau: http://www.php.net/manual/de/language.variables.basics.php
          Und wo genau verwendet Martin eine nicht gültige Variable?

          name="10" und $_REQUEST["10"]

          Du hast aber Recht mein Link hilft nicht wirklich. Ich vermute trotzdem, dass das erste Zeichen ein Buchstabe oder Unterstrich sein muss, kann es aber nicht belegen.

          ciao
          romy

          1. Hi,

            Und wo genau verwendet Martin eine nicht gültige Variable?
            name="10" und $_REQUEST["10"]

            $_REQUEST ist eine in PHP absolut gültige und übliche Variable. Der Rest, den Du nanntest, hat nicht das geringste mit Variablen zu tun.

            Ich vermute trotzdem, dass das erste Zeichen ein Buchstabe oder Unterstrich sein muss, kann es aber nicht belegen.

            Die Vermutung ist - besonders in Anbetracht der galoppierenden Konzeptlosigkeit von PHP - verständlich, spiegelt aber nicht die Tatsachen wieder.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
          2. Ich vermute trotzdem, dass das erste Zeichen ein Buchstabe oder Unterstrich sein muss, kann es aber nicht belegen.

            http://de.selfhtml.org/html/referenz/attribute.htm#input

            Dann vermute weiter. Und da die "10" ohnehin wie ein String behandelt wird (weil Request), spielt das für PHP eh keine Rolle - dem Array wär's auch egal, wenn die 10 ein Integer wäre.

        2. Hi!

          Wieso verwendest du das veraltete $_REQUEST?

          Weswegen sollte $_REQUEST veraltet sein? Nichts im PHP-Handbuch deutet darauf hin. Im Gegenteil sehe ich, dass sogar noch mit PHP 5.3.0 die Konfigurationsdirektive request_order eingeführt wurde, um den Inhalt von $_REQUEST noch gezielter beeinflussen zu können. Ein Feature, das veraltet wäre, würde ich nicht noch aufmöbeln.

          $_REQUEST ist eine Zusammenfassung von $_GET und $_POST. Vor PHP 5.3 auch noch mit $_COOKIE. Dass es aus Anwendungssicht sinnvoller sein kann, die Einzel-Arrays anzusprechen, steht auf einem anderen Blatt.

          Lo!

          1. $_REQUEST ist eine Zusammenfassung von $_GET und $_POST. Vor PHP 5.3 auch noch mit $_COOKIE. Dass es aus Anwendungssicht sinnvoller sein kann, die Einzel-Arrays anzusprechen, steht auf einem anderen Blatt.

            Darauf wollte ich hinaus, der Terminus "veraltet" war in diesem Zusammenhang zugegeben falsch.

    1. Hallo Romy,

      Geraten: Variablennamen dürfen nicht mit einer Ziffer beginnen oder nicht nur aus Ziffern bestehen!? http://www.php.net gibt bestimmt Auskunft darüber.

      Variablennamen dürfen in der Tat nicht mit einer Ziffer beginnen. Das ist hier aber belanglos, denn wir haben hier keine Variable, die mit einer Ziffer beginnt, sondern nur einen Schlüssel eines assoziativen Arrays. Der darf das.
      Ob das so eine gute Idee ist, sei dahingestellt.

      Ich übergebe innerhalb eines Formular eine Variable
      <input type="hidden" name="10" value="1" />
      und versuche diese dann auf der nächsten Seite auszulesen
      echo "->".$_REQUEST["10"]."";

      Wie gesagt: Einen Namen ausschließlich aus Ziffern zu bilden, ist unüblich, hier aber erlaubt. Ich kann daher auch anhand dieses Informationsfragment nicht sagen, was dahintersteckt. Wird denn der Request korrekt verschickt (mit Firebug oder LiveHTTP-Extension kontrollieren)?

      Ansonsten empfehle ich, nicht $_REQUEST zu verwenden, sondern konkret $_GET oder $_POST, je nachdem, was dein Formular nutzt. Und an die Ausgabe einen Leerstring anzuhängen, ergibt auch keinen Sinn.

      So long,
       Martin

      --
      F: Was ist schneller: Das Licht oder der Schall?
      A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Hi,

        Variablennamen dürfen in der Tat nicht mit einer Ziffer beginnen. Das ist hier aber belanglos, denn wir haben hier keine Variable, die mit einer Ziffer beginnt, sondern nur einen Schlüssel eines assoziativen Arrays. Der darf das.

        Aus solchen Parameternamen wurden aber unter PHP in der Vergangenheit Variablennamen gebildet, Stichwort register_globals.

        Und deshalb stecken möglicherweise an einigen Stellen im System auch noch entsprechende Einschränkungen.

        Wie gesagt: Einen Namen ausschließlich aus Ziffern zu bilden, ist unüblich, hier aber erlaubt. Ich kann daher auch anhand dieses Informationsfragment nicht sagen, was dahintersteckt.

        Ich kann das Problem auch nicht direkt nachvollziehen, ein Testscript mit ?10=1 aufgerufen ergibt bei Ausgabe von $_GET['10'] wie erwartet den Wert 1; mit $_REQUEST['10'] ebenso.

        MfG ChrisB

        --
        The most exciting phrase to hear in science, the one that heralds new discoveries, is not “Eureka!” but “That's funny...” [Isaac Asimov]
      2. Hallo Martin,

        Wie gesagt: Einen Namen ausschließlich aus Ziffern zu bilden, ist unüblich, hier aber erlaubt. Ich kann daher auch anhand dieses Informationsfragment nicht sagen, was dahintersteckt. Wird denn der Request korrekt verschickt (mit Firebug oder LiveHTTP-Extension kontrollieren)?

        Wieder was gelernt, danke!

        ciao
        romy

      3. Hi!

        Ich kann daher auch anhand dieses Informationsfragment nicht sagen, was dahintersteckt. Wird denn der Request korrekt verschickt (mit Firebug oder LiveHTTP-Extension kontrollieren)?

        Ebenfalls bei einer Fehlersuche immer wieder hilfreich: das error_reporting auf E_ALL und display_errors auf on zu stellen.

        Lo!

    2. Moin!

      echo "->".$_REQUEST["10"]."";
      Geraten: Variablennamen dürfen nicht mit einer Ziffer beginnen oder nicht nur aus Ziffern bestehen!? http://www.php.net gibt bestimmt Auskunft darüber.

      Das ist aber kein Variablenname sondern ein ein key.  Hier wäre also

      print "<pre>";  
      print_r($_REQUEST);  
      print "</pre>";
      

      ein guter Weg um herauszubekommen, was ankommt.

      <input type="hidden" name="10" value="1" />

      Hier beginnt das Problem. Der Name des Formularelementes soll ebenfalls mindestens einen Buchstabe, kann weitere Ziffern oder den Unterstrich enthalten und darf nicht mit einer Ziffer beginnen. Schon Rechenoperatoren im Name führen regelmäßig zu Katastrophen.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix

      1. Hi!

        Der Name des Formularelementes soll ebenfalls mindestens einen Buchstabe, kann weitere Ziffern oder den Unterstrich enthalten und darf nicht mit einer Ziffer beginnen.

        Wer sagt das? Die HTML-Spezifikation (4.01 und XHTML 1.0) jedenfalls nicht. Das Attribut name in Formularelementen (Beispiel input) ist vom Typ CDATA, also kein NAME-Token (wie beispielsweise bei im meta-Element). Und es steht auch keine zusätzliche Einschränkung in der Beschreibung zu den Formularen.

        Lo!

        1. Moin!

          Der Name des Formularelementes soll ebenfalls mindestens einen Buchstabe, kann weitere Ziffern oder den Unterstrich enthalten und darf nicht mit einer Ziffer beginnen.

          Wer sagt das?

          Ich zum Beispiel. Und hinsichtlich der Weiterverarbeitung mit einem vom Formular unabhängigen Programm ist es auch sinnvoll dieser Empfehlung zu folgen.

          Nehmen wir allein mal Javascript:

          <form>  
          <input name="3" type="text">  
          </form>
          

          var i="3";
          Gibt document.forms[0].elements[i].value den

          [A] Wert des 4. (Zählung beginnt bei 0) Formularelements oder
          [B] den Wert des Formularelements mit dem "Name" "3"

          des ersten Formulares zurück?

          Was passiert, wenn

          <form>  
          <input name="3-1" type="text">  
          </form>
          

          an den Server zurück gesendet und z.B. in PHP oder PERL ausgewertet wird?

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix

          1. Hi!

            Der Name des Formularelementes soll ebenfalls mindestens einen Buchstabe, kann weitere Ziffern oder den Unterstrich enthalten und darf nicht mit einer Ziffer beginnen.
            Wer sagt das?
            Ich zum Beispiel. Und hinsichtlich der Weiterverarbeitung mit einem vom Formular unabhängigen Programm ist es auch sinnvoll dieser Empfehlung zu folgen.

            Dann ist das also kein "soll" sondern eine Empfehlung, um einige Probleme der Weiterverarbeitung zu umgehen. So formuliert hat man doch gleich eine angedeutete Begründung, die etwas einleuchtender ist als einfach nur ein "Lehrsatz".

            var i="3";
            Gibt document.forms[0].elements[i].value den
            [A] Wert des 4. (Zählung beginnt bei 0) Formularelements oder
            [B] den Wert des Formularelements mit dem "Name" "3"
            des ersten Formulares zurück?

            In dem Fall kommt ein "document.forms[0].elements[i] is undefined" im Firefox. Mit dem Firebug kann man in elements sehen, dass ein Element mit dem Namen "3" enthalten ist. Aber beim Zugriff auf elements[i] wird wohl die Zahl in i erkannt und als solche verwendet. Da es in dem Fall keine 4 Elemente gibt, kommt es zum Error, ansonsten wäre A die richtige Antwort, aber sicher nicht das gewünschte Ergebnis.

            Was passiert, wenn

            <form>

            <input name="3-1" type="text">
            </form>

            
            > an den Server zurück gesendet und z.B. in PHP oder PERL ausgewertet wird?  
              
            In PHP nichts weiter. var\_dump($\_GET) ergibt:  
              
            array(1) {  
              ["3-1"]=>  
              string(3) "bla"  
            }  
              
            Und man kann ganz normal mit $\_GET['3-1'] zugreifen.  
              
            PERL kann ich nicht, Perl auch nicht.  
              
              
            Lo!
            
            1. Moin!

              Siehst Du. Und wegen all diesem Mitschmatsch soll der Name Buchstaben und Ziffern enthalten und nicht mit einer Ziffer beginnen.  Ein "soll" ist eine Empfehlung. Ein "muss" ist keine. Geregelt in RFC 2119

              MFFG (Mit freundlich- friedfertigem Grinsen)

              fastix

              1. Hi!

                Siehst Du. Und wegen all diesem Mitschmatsch soll der Name Buchstaben und Ziffern enthalten und nicht mit einer Ziffer beginnen.  Ein "soll" ist eine Empfehlung. Ein "muss" ist keine. Geregelt in RFC 2119

                Diese RFC regelt den Sprachgebrauch innerhalb der RFCs und hat keinen Einfluss auf beispielsweise unseren hier. Nach meinem sprachlichen Gefühl klingt ein "soll" (Etwas soll soundso sein.) ziemlich "amtlich" und deswegen fand ich deine Formulierung/Aussage kritikwürdig. "Es ist empfehlenswert ..." fände ich eine passendere Formulierung, weil sie mir mehr nach "echter Erfahrung" klingt. Und eine möglichst nachvollziehbare und gegebenenfalls kritisierbare Begründung sollte nach meinem Dafürhalten auch nicht fehlen, weil sie mehr Einblick ins Thema oder auch in die Wissenslücken beim Vortragenden gewährt.

                Lo!

                1. Hallo,

                  Ein "soll" ist eine Empfehlung. Ein "muss" ist keine. Geregelt in RFC 2119
                  Diese RFC regelt den Sprachgebrauch innerhalb der RFCs und hat keinen Einfluss auf beispielsweise unseren hier. Nach meinem sprachlichen Gefühl klingt ein "soll" (Etwas soll soundso sein.) ziemlich "amtlich" und deswegen fand ich deine Formulierung/Aussage kritikwürdig.

                  dann unterscheidet sich dein Sprachgefühl in diesem Punkt deutlich von meinem. Für mich drückt "soll" nichts weiter als einen Wunsch aus ("Hier soll man langsam fahren", "Ich soll heute meine Eltern vom Bahnhof abholen"), oder eventuell eine Empfehlung.
                  Wenn ich eine verbindlichere Aussage machen will, verwende ich Begriffe wie "muss", "ist notwendig, dass ...", im verneinten Satz auch "darf nicht".

                  "Es ist empfehlenswert ..." fände ich eine passendere Formulierung, weil sie mir mehr nach "echter Erfahrung" klingt. Und eine möglichst nachvollziehbare und gegebenenfalls kritisierbare Begründung sollte nach meinem Dafürhalten auch nicht fehlen, weil sie mehr Einblick ins Thema oder auch in die Wissenslücken beim Vortragenden gewährt.

                  Dem kann ich mich anschließen.

                  So long,
                   Martin

                  --
                  Chef zum Bewerber: Es gibt zwei Dinge, auf die ich allergrößten Wert lege. Das eine ist Sauberkeit! Haben Sie übrigens die Schuhe auf der Matte abgetreten? - Ja, selbstverständlich. - Gut. Das andere ist uneingeschränkte Ehrlichkeit. Übrigens, draußen liegt gar keine Fußmatte.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  1. Hi!

                    Ein "soll" ist eine Empfehlung. Ein "muss" ist keine.
                    Nach meinem sprachlichen Gefühl klingt ein "soll" (Etwas soll soundso sein.) ziemlich "amtlich" und deswegen fand ich deine Formulierung/Aussage kritikwürdig.
                    dann unterscheidet sich dein Sprachgefühl in diesem Punkt deutlich von meinem. Für mich drückt "soll" nichts weiter als einen Wunsch aus ("Hier soll man langsam fahren", "Ich soll heute meine Eltern vom Bahnhof abholen"), oder eventuell eine Empfehlung.
                    Wenn ich eine verbindlichere Aussage machen will, verwende ich Begriffe wie "muss", "ist notwendig, dass ...", im verneinten Satz auch "darf nicht".

                    Es kommt auch immer auf die konkrete Formulierung und den Kontext an.

                    "Hier soll man langsam fahren" - Kontext Verkehr, mit mehr oder weniger festgelegten "amtlichen" Regeln. "Hier soll man langsam fahren" bezieht sich vielleicht auf das Transparent quer über der Straße: "Den Schulkindern zuliebe bitte nur 30 fahren." Diese Empfehlung ist (tageszeitabhängig) sinnvoll, aber nicht amtlich (in dem Fall mal nicht übertragen gemeint). "Hier soll man langsam fahren" würde ich sicher nicht bei einer echten Geschwindigkeitsbeschränkung sagen, sondern eher: "Hier darf man nur 30 fahren." Ausschließen will ich das nicht, denn wenn man schnell etwas sagen muss, sucht man meist nicht lange nach der optimalen Formulierung. Doch hier im Forum hat man ja Zeit ... und wärend der gesprochene Satz oft schon nach kurzer Zeit verflogen ist, merkt sich das Archiv hier alle unbedachten Formulierungen auf ewig.

                    Bei einem "Ich soll heute meine Eltern vom Bahnhof abholen" steckt vermutlich mehr Zwang dahinter, auch wenn es als Wunsch formuliert war, weil sonst Taschengeldkürzung oder Haussegensschiefhängung droht.

                    Und Fastix' "soll"-Satz klang mir mehr nach HTML-Spec-Regel als nach Erfahrungsempfehlung.

                    In den RFCs hat ein "should" und "must" eine exakte Bedeutung, im allgemeinen Sprachgebrauch sehe ich mehr Interpretationsspielraum.

                    Lo!

                    1. Tach auch.

                      In den RFCs hat ein "should" und "must" eine exakte Bedeutung, im allgemeinen Sprachgebrauch sehe ich mehr Interpretationsspielraum.

                      Soll heißt Muss wenn Kann!

                      Im allgemeinen Sprachgebrauch würde ich es aber auch als Empfehlung verstehen. Wenn ich einen "Zwang" verdeutlichen müsste, würde ich dann "Muss" verwenden.

                      Bis die Tage,
                      Matti

                2. Moin!

                  Siehst Du. Und wegen all diesem Mitschmatsch soll der Name Buchstaben und Ziffern enthalten und nicht mit einer Ziffer beginnen.  Ein "soll" ist eine Empfehlung. Ein "muss" ist keine. Geregelt in RFC 2119

                  Diese RFC regelt den Sprachgebrauch innerhalb der RFCs und hat keinen Einfluss auf beispielsweise unseren hier.

                  Wir unterhalten uns hier über allerhand Netzkram. Und wo ist der oft geregelt? In den RFCs. Wie kommst Du darauf, dass der dortige Sprachgebrauch - der übrigens vom natürlichen, in der Öffentlichkeit und dem Arbeitsleben gängigen Sprachgebrauch nicht signifikant abweicht, vom üblichen Sprachgebrauch unter den "Designern"  von Programmier- oder Beschreibungssprachen und vom Sprachgebrauch in man- oder info-pages (Unic/Linux-Hilfesystem) gar nicht abweicht - gerade in diesem Forum keinen Einfluss hat?

                  Ich bitte Dich. Und zwar um Sachlichkeit.

                  MFFG (Mit freundlich- friedfertigem Grinsen)

                  fastix

                  1. Hi!

                    Siehst Du. Und wegen all diesem Mitschmatsch soll der Name Buchstaben und Ziffern enthalten und nicht mit einer Ziffer beginnen.  Ein "soll" ist eine Empfehlung. Ein "muss" ist keine. Geregelt in RFC 2119
                    Diese RFC regelt den Sprachgebrauch innerhalb der RFCs und hat keinen Einfluss auf beispielsweise unseren hier.
                    Wir unterhalten uns hier über allerhand Netzkram. Und wo ist der oft geregelt? In den RFCs. Wie kommst Du darauf, dass der dortige Sprachgebrauch - der übrigens vom natürlichen, in der Öffentlichkeit und dem Arbeitsleben gängigen Sprachgebrauch nicht signifikant abweicht, vom üblichen Sprachgebrauch unter den "Designern"  von Programmier- oder Beschreibungssprachen und vom Sprachgebrauch in man- oder info-pages (Unic/Linux-Hilfesystem) gar nicht abweicht - gerade in diesem Forum keinen Einfluss hat?

                    Das war eine falsche Formulierung meinerseits. Ich wollte sagen, dass die RFC keine normative Kraft auf unseren Sprachgebrauch hat. Einfluss mag sie haben, bei denen, die sich solche Lektüre unters Kopfkissen legen. Ich gehe jedenfalls nicht davon aus, dass sich jemand den Sprachgebrauch dort zu eigen macht, denn der unter anderem auch keinen Dialogcharakter, wie er zwischen Menschen üblich ist, sondern beschreibenden Charakter. In der Öffentlichkeit und dem Arbeitsleben sehe ich einen Großteil Menschen, die mit Technik auf Kriegsfuß stehen, und auch ansonsten mitunter Probleme haben präzise zu beschreiben, was ihr Anliegen ist, von Rechtschreibung und Grammatik ganz zu schweigen. Und das soll sich nicht signifikant von Texten mit normativem Charakter unterscheiden? Na ich weiß ja nicht. Oder meintest du jetzt nun nur solche Dinge wie Gesetze und Schreiben vom Finanzamt? Aber gut, ich werde versuchen, deine Beiträge demnächst wie eine RFC zu lesen.

                    </sachlich>
                    . o O ( Vielleicht reicht es ja, die RFCs und die HTML-Spec wörtlich ins Deutsche zu übersetzen und das ins Wiki zu stellen. )

                    Lo!

  2. Ich habe den Variablennamen und den Request mal geändert, um den Fehler mit der Zahl auszuschließen.

    <input type="hidden" name="variable" value="hallo" />
    echo "->".$_POST["variable"]."";

    Geht aber noch immer nicht.

    Das sinnlose ist, dass ich eine Zeile drüber einen Wert übergebe, den ich auf der nächsten Seite abfragen kann.

    <input type="hidden" name="user_id" value="<?php echo $_REQUEST["user_id"] ?>" />

    1. Hi,

      Ich habe den Variablennamen und den Request mal geändert, um den Fehler mit der Zahl auszuschließen.

      <input type="hidden" name="variable" value="hallo" />
      echo "->".$_POST["variable"]."";

      Dass diese Zeile immer erst *nach* dem Abschicken des Formulars einen Wert anzeigen kann, ist dir aber bewusst?

      Geht aber noch immer nicht.

      Dann liefere uns bitte endlich mehr Infos - z.B., wie dein komplettes Formular aussieht.

      Und weitere Debugging-Tipps hatte Der Martin auch schon genannt.

      MfG ChrisB

      --
      The most exciting phrase to hear in science, the one that heralds new discoveries, is not “Eureka!” but “That's funny...” [Isaac Asimov]
    2. Moin!

      <input type="hidden" name="variable" value="hallo" />
      echo "->".$_POST["variable"]."";

      Geht aber noch immer nicht.

      Das sinnlose ist, dass ich eine Zeile drüber einen Wert übergebe, den ich auf der nächsten Seite abfragen kann.

      <input type="hidden" name="user_id" value="<?php echo $_REQUEST["user_id"] ?>" />

      Äh. Halt mal:

      Das ist doch logisch, dass PHP nicht das Formular auswertet, welches es gerade zusammenbaut, sondern die Daten in $_POST, $_GET, $_COOKIE und $_REQUEST dem entnimmt, was der Useragent (häufig so gewollt: nach Interaktion mit dem Benutzer) zurücksendet nachdem er das Formular empfangen hatte. Dazu muss die Webseite an den Useragent gesendet, Die Abarbeitung Deines Skript also beendet sein. Wo sollen denn die Daten her kommen?

      Du musst also das Formular vom Server zum Benutzeragent absenden, dort mit submit einen Request auslösen, den Du auf dem Server mit einem anderen Skript oder einem erneuten Start des selben Skriptes auswertest: dann steht auch "hallo" in $_REQUEST['variable']. Dass dies vorher nicht so ist, das liegt doch in der Natur der Sache.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix