Willi H.: Formular: action=""

Guten Tag!

Das Attribut "action" des Elements "form" darf ja nicht leer sein.

Welcher Wert ist dem Attribut denn zuzuweisen, wenn die Formulardaten beim Absenden des Formulars an die URL übertragen werden sollen, unter der auch das Formular abgerufen wird. Oder einfacher ausgedrückt: Wie kann man das Formular _valide_ auf sich selbst verweisen lassen?

Schöne Grüße vom Willi

  1. Tach,

    Das Attribut "action" des Elements "form" darf ja nicht leer sein.

    es muß vorhanden sein, es darf leer sein.

    Welcher Wert ist dem Attribut denn zuzuweisen, wenn die Formulardaten beim Absenden des Formulars an die URL übertragen werden sollen, unter der auch das Formular abgerufen wird. Oder einfacher ausgedrückt: Wie kann man das Formular _valide_ auf sich selbst verweisen lassen?

    Eine leere URI ist ein Verweis auf das aktuelle Dokument: RFC2396 unter 4.2.

    mfg
    Woodfighter

    1. Guten Tag, Jens Holzkämper!

      es muß vorhanden sein, es darf leer sein.

      Ich hätte den Dokumenttyp angeben sollen. In HTML5 muss es offenbar nicht vorhanden und darf nicht leer sein.

      Eine leere URI ist ein Verweis auf das aktuelle Dokument: RFC2396 unter 4.2.

      Danke sehr.

      Schöne Grüße vom Willi

  2. Hi!

    Das Attribut "action" des Elements "form" darf ja nicht leer sein.

    Kommt drauf an.

    Wie kann man das Formular _valide_ auf sich selbst verweisen lassen?

    HTML 4.01 / XHTML 1.0: leer lassen. HTML5: Attribut ganz weglassen. Sie auch https://forum.selfhtml.org/?t=206043&m=1397889 ff.

    Lo!

    1. Guten Tag, dedlfix!

      Kommt drauf an.

      Stimmt. Ich hätte den Dokumenttyp angeben sollen.

      HTML 4.01 / XHTML 1.0: leer lassen. HTML5: Attribut ganz weglassen. Sie auch https://forum.selfhtml.org/?t=206043&m=1397889 ff.

      Super, danke sehr. Ich habe übrigens festgestellt, dass action="." valide gemäß HTML5 ist und funktioniert. Aber Weglassen ist natürlich schöner.

      Referenziert ein einzelner Punkt eigentlich im Allgemeinen die aktuelle Datei? Das aktuelle Verzeichnis wird ja mit ./ referenziert und mit ../ das Verzeichnis über dem aktuellen Verzeichnis.

      Schöne Grüße vom Willi

      1. Hi!

        Referenziert ein einzelner Punkt eigentlich im Allgemeinen die aktuelle Datei? Das aktuelle Verzeichnis wird ja mit ./ referenziert und mit ../ das Verzeichnis über dem aktuellen Verzeichnis.

        . und .. beziehen sich immer auf Verzeichnisse. Der / dahinter ist nur das Trennzeichen für nachfolgende Angaben.

        Lo!

        1. Guten Abend, dedlfix!

          . und .. beziehen sich immer auf Verzeichnisse. Der / dahinter ist nur das Trennzeichen für nachfolgende Angaben.

          Danke für die Information.

          Weißt du auch, warum action="." in HTML5 valide ist?

          Schöne Grüße vom Willi

          1. Hallo,

            . und .. beziehen sich immer auf Verzeichnisse. Der / dahinter ist nur das Trennzeichen für nachfolgende Angaben.
            Danke für die Information.
            Weißt du auch, warum action="." in HTML5 valide ist?

            weil der Punkt für das aktuelle Verzeichnis steht, und das ist eine gültige URL. Der Server wird das üblicherweise auf das Standarddokument abbilden, z.B. index.html.

            So long,
             Martin

            --
            "Life! Don't talk to me about life!"
              (Marvin, the paranoid android in Douglas Adams' "The Hitchhiker's Guide To The Galaxy")
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Guten Abend, Der Martin!

              weil der Punkt für das aktuelle Verzeichnis steht, und das ist eine gültige URL. Der Server wird das üblicherweise auf das Standarddokument abbilden, z.B. index.html.

              Danke für die Information.

              Schöne Grüße vom Willi

      2. @@Willi H.:

        nuqneH

        Super, danke sehr. Ich habe übrigens festgestellt, dass action="." valide gemäß HTML5 ist und funktioniert.

        Valide schon (ist ja nicht leer). Aer funktioniert da immer?

        action="?" sollte das Gewünschte tun: Es erfüllt die Forderung von HTML5 (warum auch immer das gefordert wird?) und verweist immer noch auf dieselbe Ressource.

        Aber Weglassen ist natürlich schöner.

        Das mag sein.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Guten Abend, Gunnar Bittersmann!

          Valide schon (ist ja nicht leer). Aer funktioniert da immer?

          Wieso nicht?

          action="?" sollte das Gewünschte tun: Es erfüllt die Forderung von HTML5 (warum auch immer das gefordert wird?) und verweist immer noch auf dieselbe Ressource.

          Danke für die Info.

          Schöne Grüße vom Willi

        2. Hi,

          action="?" sollte das Gewünschte tun: Es erfüllt die Forderung von HTML5 (warum auch immer das gefordert wird?) und verweist immer noch auf dieselbe Ressource.

          Nein, das tut es nicht.
          Denn ein ggf. vorhandener Query-String ist damit vernichtet.

          cu,
          Andreas

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

            nuqneH

            action="?" sollte das Gewünschte tun: Es erfüllt die Forderung von HTML5 (warum auch immer das gefordert wird?) und verweist immer noch auf dieselbe Ressource.

            Nein, das tut es nicht.
            Denn ein ggf. vorhandener Query-String ist damit vernichtet.

            Ist er das nicht sowieso, wenn das Formular neu abgeschickt wird?

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Hi,

              action="?" sollte das Gewünschte tun: Es erfüllt die Forderung von HTML5 (warum auch immer das gefordert wird?) und verweist immer noch auf dieselbe Ressource.

              Nein, das tut es nicht.
              Denn ein ggf. vorhandener Query-String ist damit vernichtet.

              Ist er das nicht sowieso, wenn das Formular neu abgeschickt wird?

              bei method="post" und z.B. action="" nicht. Warum auch?
              Und auch bei method="get" werden die aus den Formularfeldern erzeugten name-value-Pärchen an den im action-Attribut ggf. vorhandenen Query-String angehängt.

              cu,
              Andreas

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

                Und auch bei method="get" werden die aus den Formularfeldern erzeugten name-value-Pärchen an den im action-Attribut ggf. vorhandenen Query-String angehängt.

                Nö, machts nicht, wird ersetzt.

                Lo!

  3. @@Willi H.:

    nuqneH

    Das Attribut "action" des Elements "form" darf ja nicht leer sein.

    Wer sagt das?

    Die DTD nicht:

    <!ATTLIST FORM
      […]
      action %URI; #REQUIRED […]

    'URI' wurde zuvor deklariert als:

    <!ENTITY % URI "CDATA" […]>

    Der Wert von @action ist also CDATA. Es gibt keine Chance, von CDATA zu verlangen, nicht leer zu sein.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Guten Tag, Gunnar Bittersmann!

      Wer sagt das?

      HTML5 - W3C Editor's Draft. Ich hätte den Dokumenttyp angeben sollen. *duck*

      Die DTD nicht:

      <!ATTLIST FORM
        […]
        action %URI; #REQUIRED […]

      'URI' wurde zuvor deklariert als:

      <!ENTITY % URI "CDATA" […]>

      Der Wert von @action ist also CDATA. Es gibt keine Chance, von CDATA zu verlangen, nicht leer zu sein.

      Vielen Dank für die Informationen.

      Schöne Grüße vom Willi

  4. hi Willi,

    egal ob es leer sein darf oder nicht, es ist immer gut, wenn da was definiertes drinsteht, das hilft bei der Fehlersuche, wenn Seiten per Script erstellt werden. Zu Letzterem ein bischen Programmiertechnik:

    a- gehört das Form zu einem Script, passt in die form-action die Umgebungsvariable SCRIPT_NAME
    b- ebenfalls passend ist die Variable REQUEST_URI, besser gesagt der Teil 'path' vom REQUEST_URI (_URI ohne QUERY_STRING und ohne #Fragment)

    b-tens ist insbesondere dann angebracht, wenn mod_rewrite im Spiel ist.

    Hotti

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Guten Tag, hotti!

      egal ob es leer sein darf oder nicht, es ist immer gut, wenn da was definiertes drinsteht, das hilft bei der Fehlersuche, wenn Seiten per Script erstellt werden. Zu Letzterem ein bischen Programmiertechnik:

      a- gehört das Form zu einem Script, passt in die form-action die Umgebungsvariable SCRIPT_NAME
      b- ebenfalls passend ist die Variable REQUEST_URI, besser gesagt der Teil 'path' vom REQUEST_URI (_URI ohne QUERY_STRING und ohne #Fragment)

      b-tens ist insbesondere dann angebracht, wenn mod_rewrite im Spiel ist.

      Vielen Dank für die Informationen.

      Also so?

      <form action="$_SERVER['SCRIPT_NAME']" method="post">  
      <!-- hier folgen die Formularelemente -->  
      </form>
      

      bzw.

      <form action="$_SERVER['REQUEST_URI']" method="post">  
      <!-- hier folgen die Formularelemente -->  
      </form>
      

      Schöne Grüße vom Willi

      1. hi Willi,

        Also so?

        <form action="$_SERVER['SCRIPT_NAME']" method="post">

        <!-- hier folgen die Formularelemente -->
        </form>

          
        SCRIPT\_NAME ist ok, in PHP gibt es auch noch $\_SERVER['SELF']  
        (gib einfach mal die Server-Umgebung aus)  
          
        
        > bzw.  
          
        
        > [code lang=html]<form action="$\_SERVER['REQUEST\_URI']" method="post">  
          
        Prinzipiell ja, es gibt jedoch irgendwo in PHP(habs nicht zur Hand) eine Funktion, womit Du aus REQUEST\_URI den PATH rausschnippeln kannst.  
          
        REQUEST\_URI: http://example.com/foo/bar?parameter=wert#a1  
                     | auth            | path  | query\_string | fragment  
          
        D.h., i.d.R. brauchst Du nur den path,  
        Hotti
        
        1. Hi!

          Welchen gesteigerten Sinn hat es denn, wenn die Selbstreferenz nicht einfachst automatisch durch Weglassen erfolgt, sondern durch explizite Eintragung in x Varianten mit y Möglichkeiten, dabei Fehler zu fabrizieren?

          in PHP gibt es auch noch $_SERVER['SELF']

          Richtig wäre PHP_SELF gewesen, aber das und

          <form action="$_SERVER['REQUEST_URI']" method="post">

          REQUEST_URI haben die Eigenheit, dass sie durch Ergänzungen der aufgerufenen URL um weitere Zeichen erweitert werden können und sie trotzdem noch auf das selbe Script verweisen. Wenn man diese Werte dann ohne Beachtung des Kontextwechsels einfügt, hat man sich mal wieder eine XSS-Lücke gebaut.

          Lo!

        2. Guten Abend, Hotti!

          SCRIPT_NAME ist ok, in PHP gibt es auch noch $_SERVER['SELF']
          (gib einfach mal die Server-Umgebung aus)

          Und wonach richte ich mich da?

          Prinzipiell ja, es gibt jedoch irgendwo in PHP(habs nicht zur Hand) eine Funktion, womit Du aus REQUEST_URI den PATH rausschnippeln kannst.

          REQUEST_URI: http://example.com/foo/bar?parameter=wert#a1
                       | auth            | path  | query_string | fragment

          D.h., i.d.R. brauchst Du nur den path,

          Diese Funktion und dazu analog eine, um auth herauszuschnippeln, könnte ich sehr gut gebrauchen. Wenn sie dir noch mal begegnet, sei doch so gut ... ;-)

          Schöne Grüße vom Willi

          1. Hi,

            Diese Funktion und dazu analog eine, um auth herauszuschnippeln, könnte ich sehr gut gebrauchen. Wenn sie dir noch mal begegnet, sei doch so gut ... ;-)

            parse_url, parse_str

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Guten Abend, ChrisB!

              parse_url, parse_str

              Super, danke sehr.

              Schöne Grüße vom Willi

            2. Guten Abend, ChrisB!

              parse_url, parse_str

              Weißt du, wie man aus dem Host Second- und Top-Level-Domain herausbekommt, ohne zu wissen, ob und welche Subdomain(s) er enthält?

              Beispiele:
              www.example.net > example.net
              forum.example.net > example.net

              Schöne Grüße vom Willi

              1. Hi,

                Weißt du, wie man aus dem Host Second- und Top-Level-Domain herausbekommt, ohne zu wissen, ob und welche Subdomain(s) er enthält?

                Von rechts her nach Punkten suchen.

                Achtung:
                während bei der Top-Level-Domain .de die Second-Level-Domain diejenige ist, die üblicherweise einer Firma/einem Menschen gehört, ist das z.B. bei der TLD .uk anders - da ist erst die Third-Level-Domain die "eigentliche" Domain, denn bei .uk gibt's noch ein Zwischen-Level (um z.B. zwischen .co.uk, .gov.uk, .org.uk usw. zu unterscheiden).

                cu,
                Andreas

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

                  während bei der Top-Level-Domain .de die Second-Level-Domain diejenige ist, die üblicherweise einer Firma/einem Menschen gehört, ist das z.B. bei der TLD .uk anders - da ist erst die Third-Level-Domain die "eigentliche" Domain, denn bei .uk gibt's noch ein Zwischen-Level (um z.B. zwischen .co.uk, .gov.uk, .org.uk usw. zu unterscheiden).

                  und .uk ist nicht die einzige TLD, bei der das so gehandhabt wird. Taiwan (.tw) und Südafrika (.za) scheinen genauso zu verfahren; und ich meine, es gäbe sogar noch mehr in der Art. Warum die das tun, ist wieder eine andere Frage, auf die ich auch noch keine Antwort gefunden habe.

                  Ciao,
                   Martin

                  --
                  Die meisten Menschen werden früher oder später durch Computer ersetzt.
                  Für manche würde aber auch schon ein einfacher Taschenrechner genügen.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  1. Hi,

                    während bei der Top-Level-Domain .de die Second-Level-Domain diejenige ist, die üblicherweise einer Firma/einem Menschen gehört, ist das z.B. bei der TLD .uk anders - da ist erst die Third-Level-Domain die "eigentliche" Domain, denn bei .uk gibt's noch ein Zwischen-Level (um z.B. zwischen .co.uk, .gov.uk, .org.uk usw. zu unterscheiden).

                    und .uk ist nicht die einzige TLD, bei der das so gehandhabt wird.

                    darum ja auch das "z.B." in meiner Aussage.

                    Warum die das tun, ist wieder eine andere Frage, auf die ich auch noch keine Antwort gefunden habe.

                    Erweiterung des Adressraums. So kann z.B. eine Familie, deren Nachname wie ein County/eine Stadt/ein Dorf heißt, trotzdem ihre eigene Domain unter .priv.uk (IIRC ist es .priv.uk) haben, während die Gebietskörperschaft unter .gov.uk ihre Domain betreibt - und die gleichnamige Firma läuft unter .co.uk

                    cu,
                    Andreas

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

                    nuqneH

                    und .uk ist nicht die einzige TLD, bei der das so gehandhabt wird. Taiwan (.tw) und Südafrika (.za) scheinen genauso zu verfahren; und ich meine, es gäbe sogar noch mehr in der Art.

                    Man muss gar nicht in die Ferne schweifen, auch bei unseren Nachbarn ist das so: Regierung unter .gov.pl (bspw. das Parlament sejm.gov.pl), Hochschulen unter .edu.pl (bspw. uw.edu.pl, dawne czasy …), Unternehmen unter .com.pl (bspw. das Gebräu zywiec.com.pl, während unter zywiec.pl die paar Häuser rings um die Brauerei zu erreichen sind).

                    YY Na zdrowie!

                    Qapla'

                    --
                    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                    (Mark Twain)
                    1. Guten Abend, Gunnar Bittersmann!

                      während unter zywiec.pl die paar Häuser rings um die Brauerei zu erreichen sind).

                      xD

                      Schöne Grüße vom Willi

                  3. Guten Abend, Der Martin!

                    und .uk ist nicht die einzige TLD, bei der das so gehandhabt wird. Taiwan (.tw) und Südafrika (.za) scheinen genauso zu verfahren; und ich meine, es gäbe sogar noch mehr in der Art. Warum die das tun, ist wieder eine andere Frage, auf die ich auch noch keine Antwort gefunden habe.

                    MudGuard hat sie dir gegeben. ;-)

                    Schöne Grüße vom Willi

                2. Guten Abend, MudGuard!

                  Weißt du, wie man aus dem Host Second- und Top-Level-Domain herausbekommt, ohne zu wissen, ob und welche Subdomain(s) er enthält?

                  Von rechts her nach Punkten suchen.

                  Achtung:
                  während bei der Top-Level-Domain .de die Second-Level-Domain diejenige ist, die üblicherweise einer Firma/einem Menschen gehört, ist das z.B. bei der TLD .uk anders - da ist erst die Third-Level-Domain die "eigentliche" Domain, denn bei .uk gibt's noch ein Zwischen-Level (um z.B. zwischen .co.uk, .gov.uk, .org.uk usw. zu unterscheiden).

                  Vielen Dank für den Tipp. Ich hatte gehofft, es gäbe da schon etwas.

                  Schöne Grüße vom Willi

            3. Guten Abend, ChrisB!

              parse_url, parse_str

              Einen habe ich noch. ;-)

              Wie ist es um die Performance von parse_url() im Vergleich zu substr() bestellt?

              Schöne Grüße vom Willi

              1. Hi,

                Wie ist es um die Performance von parse_url() im Vergleich zu substr() bestellt?

                Das ist absolut belanglos - Stichwort Mikro-Optimierung, die bei PHP in 99kommasehrviele9en Prozent sinnfrei ist.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. Guten Abend, ChrisB!

                  Das ist absolut belanglos - Stichwort Mikro-Optimierung, die bei PHP in 99kommasehrviele9en Prozent sinnfrei ist.

                  Ok. Mit substr() geht's zumindest deutlich kürzer, aber das ist dann wohl auch kein Kriterium.

                  Schöne Grüße vom Willi

        3. Hallo,

          <form action="$_SERVER['SCRIPT_NAME']" method="post">

          merkt denn hier niemand, wie sinnlos es ist, einfach nur den Namen einer PHP-Variablen als URL zu notieren?

          Ciao,
           Martin

          --
          Der geistige Horizont ist der Abstand zwischen Brett und Hirn.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Guten Abend, Der Martin!

            merkt denn hier niemand, wie sinnlos es ist, einfach nur den Namen einer PHP-Variablen als URL zu notieren?

            So wäre es wohl besser:

            <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">

            Schöne Grüße vom Willi

          2. Hallo,

            <form action="$_SERVER['SCRIPT_NAME']" method="post">

            merkt denn hier niemand, wie sinnlos es ist, einfach nur den Namen einer PHP-Variablen als URL zu notieren?

            Vielleicht hilft Dir das 'Kontextwechsel-Beachtungs-Modell' (KWBM) dabei, zu verstehen, dass es vielleicht doch nicht sinnlos ist?

            Hotti

            1. Hi,

              <form action="$_SERVER['SCRIPT_NAME']" method="post">
              merkt denn hier niemand, wie sinnlos es ist, einfach nur den Namen einer PHP-Variablen als URL zu notieren?
              Vielleicht hilft Dir das 'Kontextwechsel-Beachtungs-Modell' (KWBM) dabei, zu verstehen, dass es vielleicht doch nicht sinnlos ist?

              nein, definitiv nicht. Du hast PHP-Variablen ins Spiel gebracht, ohne darauf hinzuweisen, dass es sich um PHP handelt, und hast auch noch versäumt, PHP-Tags und ein echo oder etwas Gleichwertiges hinzuschreiben. Ohne diese wichtige Information sind die Codebeispiele aber unbrauchbar.

              Ciao,
               Martin

              --
              Wer mit dem Finger droht, sollte ihn am Abzug haben, und nicht in der Nase.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Guten Abend, Der Martin!

                nein, definitiv nicht. Du hast PHP-Variablen ins Spiel gebracht, ohne darauf hinzuweisen, dass es sich um PHP handelt, und hast auch noch versäumt, PHP-Tags und ein echo oder etwas Gleichwertiges hinzuschreiben. Ohne diese wichtige Information sind die Codebeispiele aber unbrauchbar.

                Im Prinzip hast du ja recht, ich habe ihn aber trotzdem verstanden. ;-)

                Schöne Grüße vom Willi

                1. Hallo Willi,

                  Im Prinzip hast du ja recht, ich habe ihn aber trotzdem verstanden. ;-)

                  ja, ich weiß. Aber erst nachdem ich gemeckert habe. :-)

                  Schönen Abend noch,
                   Martin

                  --
                  Niemand ist überflüssig: Er kann immer noch als schlechtes Beispiel dienen.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  1. Guten Abend, Der Martin!

                    ja, ich weiß. Aber erst nachdem ich gemeckert habe. :-)

                    Das ist deine Interpretation. ;-)

                    Schöne Grüße vom Willi

              2. hi,

                nein, definitiv nicht. Du hast PHP-Variablen ins Spiel gebracht, ohne darauf hinzuweisen, dass es sich um PHP handelt, und hast auch noch versäumt, PHP-Tags und ein echo oder etwas Gleichwertiges hinzuschreiben. Ohne diese wichtige Information sind die Codebeispiele aber unbrauchbar.

                Numal langsam. Weiter oben schrieb ich, dass Variablen eingesetzt werden können, wenn das Formular von einem Script erzeugt wird. Diese Variablen sind Umgebungsvariablen, die der Server bereitstellt. Möchtest Du weiter mit mir streiten über die Brauchbarkeit der Codebeipsiele, beachte bitte, dass ich PHP nicht näher unterstütze (1) und Gewähr für richtigen Syntax nur in Sachen Perl gebe.

                1. Auch das habe ich weiter oben bereits vermerkt.

                Hotti