Henry: formular get parameter als action url

Hallo,

gerade fand ich bei eienr Fehlersuche etwas Unerwartetes. Vor vielen Jahren war hier mal die Thematik, ob man im Formular, genauer in der action-Angabe auch Werte mit einfügen darf. Der Tenor damals (finde das hier leider nicht mehr auf die Schnelle) war, dass das keine Problem wäre. War es auch nicht damals, mittlerweile ist es aber so, dass die Server/Browser sich anscheinend entscheiden die Parameter zu ignorieren.

<form action="xy.php?a=1&b=2"> führt nur zu xy.php

Ist das bekannt und seit wann hat sich das geändert oder habe ich das falsch in der Erinnerung?

Gruss
Henry

--
Meine Meinung zu DSGVO & Co:
„Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“
  1. @@Henry

    <form action="xy.php?a=1&b=2">
    

    BTW, & ist in HTML ein Sonderzeichen und sollte escapet werden:

    <form action="xy.php?a=1&amp;b=2">
    

    Es könnte zu unerwarteten Effekten kommen, wenn der Name des Parameters mit dem Bezeichner einer Zeichenentity übereinstimmt.

    LLAP 🖖

    --
    „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
    „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

    —Marc-Uwe Kling
    1. Es könnte zu unerwarteten Effekten kommen, wenn der Name des Parameters mit dem Bezeichner einer Zeichenentity übereinstimmt.

      Um das zu vermeiden gibt es die Pozentkodierung. MFG

      1. Tach!

        Es könnte zu unerwarteten Effekten kommen, wenn der Name des Parameters mit dem Bezeichner einer Zeichenentity übereinstimmt.

        Um das zu vermeiden gibt es die Pozentkodierung.

        Nicht in diesem HTML-Kontext, da ist &amp; die richtige Kodierung für ein &.

        dedlfix.

        1. Tach!

          Es könnte zu unerwarteten Effekten kommen, wenn der Name des Parameters mit dem Bezeichner einer Zeichenentity übereinstimmt.

          Um das zu vermeiden gibt es die Pozentkodierung.

          Nicht in diesem HTML-Kontext, da ist &amp; die richtige Kodierung für ein &.

          In diesem Kontext ist das Ampersand kein Parameter! Und muss im Übrigen auch nicht als Entity notiert werden. MFG

          1. Tach!

            Es könnte zu unerwarteten Effekten kommen, wenn der Name des Parameters mit dem Bezeichner einer Zeichenentity übereinstimmt.

            Um das zu vermeiden gibt es die Pozentkodierung.

            Nicht in diesem HTML-Kontext, da ist &amp; die richtige Kodierung für ein &.

            In diesem Kontext ist das Ampersand kein Parameter!

            Es ist kein Bestandteil von Key oder Value, deswegen muss es auch nicht für diesen Kontext maskiert werden. Aber für HTML sollte es maskiert sein.

            <form action="test4.php?a=42%26b=23" method="post">
            <input type="submit">
            </form>
            
            <form action="test4.php?a=42&amp;b=23" method="post">
            <input type="submit">
            </form>
            
            <pre>
            <?php
            print_r($_GET);
            

            Schickst du das erste Formular ab, bekommst du

            Array
            (
                [a] => 42&b=23
            )
            

            beim zweiten hingegen

            Array
            (
                [a] => 42
                [b] => 23
            )
            

            dedlfix.

            1. Relevant und verbindlich für die Praxis war ist und bleibt für mich letztendlich das, was der Validator für richtig befindet. MFG

              1. @@pl

                Relevant und verbindlich für die Praxis war ist und bleibt für mich letztendlich das, was der Validator für richtig befindet. MFG

                Relevant und verbindlich für die Praxis war, ist und bleibt, was rauskommen soll. Und was rauskommt, ist bei Prozent-Escaping was ganz anderes als bei HTML-Escaping; dedlfix hat die Unterschiede anschaulich dargestellt.

                LLAP 🖖

                --
                „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
                „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

                —Marc-Uwe Kling
                1. Der Kontext für ein Ampersand im URL ist nicht HTML! Im Übrigen kann man diesen Delimiter auch anders benennen, was vielfach auch empfohlen wird.

                  MFG

                  1. Hallo pl,

                    Der Kontext für ein Ampersand im URL ist nicht HTML! Im Übrigen kann man diesen Delimiter auch anders benennen, was vielfach auch empfohlen wird.

                    Bevor es Teil der URL wird, ist ein ganz normaler Attributwert im HTML-Kontext.

                    Bis demnächst
                    Matthias

                    --
                    Du kannst das Projekt SELFHTML unterstützen,
                    indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
  2. Tach!

    gerade fand ich bei eienr Fehlersuche etwas Unerwartetes. Vor vielen Jahren war hier mal die Thematik, ob man im Formular, genauer in der action-Angabe auch Werte mit einfügen darf. Der Tenor damals (finde das hier leider nicht mehr auf die Schnelle) war, dass das keine Problem wäre.

    Vermutlich war das eingeschränkt auf POST.

    War es auch nicht damals, mittlerweile ist es aber so, dass die Server/Browser sich anscheinend entscheiden die Parameter zu ignorieren.

    Parameter bei GET bilden sich aus den Formularwerten. Und Hidden-Inputs existieren. Hat man auch damals™ schon für zusätzliche, feststehende Werte verwendet.

    Ist das bekannt und seit wann hat sich das geändert oder habe ich das falsch in der Erinnerung?

    Die HTML-4.01-Spec ist da noch etwas ungenau formuliert. HTML5 hat ja meist nichts neues an den grundlegenden Dingen erfunden, sondern sie nur genauer spezifiziert. Dort steht, dass der Query-Teil der geparsten URL mit den den serialisierten Formularwerten gesetzt wird, nicht zusammengemischt.

    dedlfix.

    1. Nach dem MVC-Entwurfsmuster ist das action-Attribut ohnehin überflüssig, weil der URL derselbe ist. Zumal dessen alle Attribute im <form>-Element optional sind.

      MFG

      1. Lieber pl,

        Nach dem MVC-Entwurfsmuster ist das action-Attribut ohnehin überflüssig

        HTML hat nichts mit MVC zu tun. Dein Einwand liest sich für mich wie "aber denke doch einer an die Kinder!".

        Liebe Grüße

        Felix Riesterer

  3. Nicht empfehlenswert. Soll das Submit per JS gehandelt werden, das <form>-action-Attribute (und alle anderen auch) ist für ein über dem <form> erstelltes FormData-Objekt uninteressant.

    MFG

  4. Anstatt ein action Attribut mit QUERY_STRING zu setzen für Formulare die mit POST rausgehen sollen, ist auch möglich, das Formular über eine Seite mit QUERY_STRING aufzurufen. Also bspw. zeigt der URL /?form=kunde ein Formular zum Editieren der Kundendaten.

    Ein action Attribute wird nicht gesetzt und bei einem POST geht der Request an o.g. URL mit QUERY_STRING.

    MFG

  5. <form action="xy.php?a=1&b=2"><!-- führt nur zu xy.php -->
    

    Ist das bekannt und seit wann hat sich das geändert oder habe ich das falsch in der Erinnerung?

    Mir deucht, das war schon immer so. Ich jedenfalls "verbaue" in solchen Fällen als "action" die xy.php und die Name/Wert Paare (hier das zusätzlich fehlerhafte) "a=1&b=2" als versteckte Inputs.

    1. <form action="xy.php?a=1&b=2"><!-- führt nur zu xy.php -->
      

      Ist das bekannt und seit wann hat sich das geändert oder habe ich das falsch in der Erinnerung?

      Mir deucht, das war schon immer so. Ich jedenfalls "verbaue" in solchen Fällen als "action" die xy.php und die Name/Wert Paare (hier das zusätzlich fehlerhafte) "a=1&b=2" als versteckte Inputs.

      Ist ist nicht fehlerhaft. Bei einem POST geht der Request genau dahin. MFG