Truble: Parameter gehen bei onchange verloren

Hi,

ich übersende eine Form per onchange="this.form.submit()". Leider gehen mir dabei die Parameter verloren.

<form action=script.php?param=1&amp;param2=2&amp;param3=3>

Ich hätte nun die 3 Parameter in $_POST erwartet, da sind sie aber nicht.

Was mache ich falsch?

Gruß, Tim

  1. <form action=script.php?param=1&amp;param2=2&amp;param3=3>

    Ich hätte nun die 3 Parameter in $_POST erwartet, da sind sie aber nicht.

    Die Parameter in der URL sind immer in $_GET zu suchen (auch wenn es ein POST-Request ist).

    Auch die restlichen, durch Formularfelder erzeugte Parameter werden in $_GET liegen, solange du nicht action="post" angibst.

    Mathias

    1. <form action=script.php?param=1&amp;param2=2&amp;param3=3>

      Auch die restlichen, durch Formularfelder erzeugte Parameter werden in $_GET liegen, solange du nicht action="post" angibst.

      Hallo Mathias,

      aber auch mein $_REQUEST Array ist leer :-(

      Gruß, Tim

      1. <form action=script.php?param=1&amp;param2=2&amp;param3=3 method=post>

        geht. Dann sind die Parameter ikn $_REQUEST drin, aber ohne method=post nicht??

        Ist das nicht seltsam?

        Gruß, Tim

        1. Hi,

          <form action=script.php?param=1&amp;param2=2&amp;param3=3 method=post>

          geht. Dann sind die Parameter ikn $_REQUEST drin, aber ohne method=post nicht??

          Manche Browser verwerfen bei method=GET einen ggf. bereits vorhandenen Querystring der als action angegebenen Zieladresse, und ersetzen ihn durch einen neuen, den sie aus den Formularinhalten zusammensetzen.

          Wenn du „Defaultwerte“ bei Nutzung von GET übergeben willst, nutzen hidden-Formularfelder.

          Ist das nicht seltsam?

          Die Spezifikation ist diesbezüglich nicht ganz wasserdicht formuliert:
          “get: With the HTTP "get" method, the form data set is appended to the URI specified by the action attribute (with a question-mark ("?") as separator) and this new URI is sent to the processing agent.”
          http://www.w3.org/TR/html401/interact/forms.html#h-17.13.1

          Einerseits sagt sie zwar, dass im action-Attribut ein URI steht, was einen Querystring erlaubt; andererseits spricht sie aber davon, dass die Formulardaten mit einem Fragezeichen als Trennzeichen an die neu zu bildende Adresse angehängt werden. Noch ein weiteres Fragezeichen anzufügen, wenn bereits ein Querystring und damit auch ein Fragezeichen vorhanden ist, wäre ungültig. Also bleibt dem Client entweder die Möglichkeit, den vorhandenen QS wegzuwerfen und durch einen komplett neuen zu ersetzen, oder den vorhandenen korrekt zu ergänzen. Ob letzteres von manchen Browsern gemacht wird, weiß ich spontan nicht.

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          1. Hi,

            Manche Browser verwerfen bei method=GET einen ggf. bereits vorhandenen Querystring der als action angegebenen Zieladresse, und ersetzen ihn durch einen neuen, den sie aus den Formularinhalten zusammensetzen.

            HTML5 spezifiert dieses Verhalten übrigens explizit, http://www.w3.org/TR/html5/association-of-controls-and-forms.html#submit-mutate-action:
            “Let query be the result of encoding the form data set [...]
            Let destination be a new URL that is equal to the action except that its <query> component is replaced by query (adding a U+003F QUESTION MARK character (?) if appropriate).”

            Wenn du also (feste) Werte per GET-Formular übergeben willst, ohne sie vom Nutzer eingeben zu lassen - dann sind wie bereits erwähnt hidden-Felder die angebrachte und auch zukunftssichere Methode.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Wenn du also (feste) Werte per GET-Formular übergeben willst, ohne sie vom Nutzer eingeben zu lassen - dann sind wie bereits erwähnt hidden-Felder die angebrachte und auch zukunftssichere Methode.

              Hi Chris,

              habe ich nun so umgestellt, obwohl ja mit dem zusatz "method=post" alles geklappt hätte. Aber wie Du schon schriebst, je nach Browser hätte das dann zu ungültigen URLs führen können.

              Ist das denn korrekt und gewollt, dass der User die hidden-fields über die URL mit eigenen Werten überschreiben darf/kann?

              Gruß, Tim

              1. Hi,

                Ist das denn korrekt und gewollt, dass der User die hidden-fields über die URL mit eigenen Werten überschreiben darf/kann?

                URLs sind immer manipulierbar. Hidden-Felder sind nicht als „Schutz“ dagegen gedacht.
                Eine Anfrage, die deinen Server erreicht, muss nicht mal von irgendeinem „Formular“ stammen.
                Egal, ob GET oder POST verwendet wird - Eingabedaten sind immer zu validieren.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
              2. Hi,

                Ist das denn korrekt und gewollt, dass der User die hidden-fields über die URL mit eigenen Werten überschreiben darf/kann?

                Er kann sie ja auch direkt im Hidden-Field überschreiben (DOM-Inspector, Firebug und wie die Tools nicht alle heißen, machen's sogar sehr leicht).

                cu,
                Andreas

                --
                Warum nennt sich Andreas hier MudGuard?
                O o ostern ...
                Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.