Frage

Ist es legal, mit einem HTML-Formular, um mehr als ein „verstecktem“ Bedienelement mit dem gleichen Namen? Ich erwarte, dass die Werte aller dieser Elemente auf dem Server zu erhalten. Wenn es legal ist, tut der große Browser das Verhalten korrekt implementieren?

War es hilfreich?

Lösung

Der Browser ist in Ordnung mit ihm. Doch wie die Anwendungsbibliothek parst kann es variieren.

Programme sind sollte zu gruppieren identisch benannten Elemente. Während die HTML-Spezifikation dies nicht ausdrücklich sagt, wird es implizit in der

Andere Tipps

Wenn Sie etwas wie folgt aus:

<input type="hidden" name="x" value="1" />
<input type="hidden" name="x" value="2" />
<input type="hidden" name="x" value="3" />

Ihre Abfrage-String wird wie x=1&x=2&x=3 entpuppen suchen ... Je nach Server-Software verwenden Sie den Query-String zu analysieren dies nicht gut funktionieren könnte.

Ja, und die meisten Anwendungsserver werden die passenden Elemente und verketten sie mit Kommas, so dass eine Form wie dieses sammeln:

<html>
<form method="get" action="http://myhost.com/myscript/test.asp">
<input type="hidden" name="myHidden" value="1">
<input type="hidden" name="myHidden" value="2">
<input type="hidden" name="myHidden" value="3">
<input type="submit" value="Submit">
</form>
</html>

... würde zu einer URL lösen (in der GET-Fall - POST würde die gleiche Art und Weise arbeiten, obwohl) wie folgt aus:

  

http://myhost.com/myscript.asp?myHidden=1&myHidden = 2 & myHidden = 3

... und würde in Code wie dies für Sie ausgesetzt werden: (beispielsweise folgend etwas wie Response.Write (Request.QueryString ( "myHidden")):

1, 2, 3

So die Werte greifen, dann würden Sie nur die Zeichenfolge aufgeteilt und greifen Sie als ein Array (oder was auch immer in der Sprache Ihrer Wahl vergleichbar ist).

(sollte geklärt werden: In PHP, es etwas anders (als Johnathan weist darauf hin, Klammer-Notation die Elemente als Array zu Ihrem PHP-Code macht), aber ASP, ASP.NET und Coldfusion alle Werte als Komma belichten -separated Liste. Also ja, die doppelte Nennung ist vollständig gültig.)

HTML5

Der nicht-normative Abschnitt 4.10.1.3 ein Formular Konfiguration mit einem Server zu kommunizieren ausdrücklich sagt, dass es gültig ist:

  

Mehrere Steuerungen können den gleichen Namen haben; zum Beispiel, hier geben wir alle Kontrollkästchen den gleichen Namen, und der Server unterscheidet, welche Checkbox durch seeing geprüft wurde, welche Werte mit diesem Namen abgegeben -. wie die Radio-Buttons, werden sie auch eindeutige Werte mit dem Wert Attribute angegeben

Die normative Version davon ist einfach, dass es nicht überall verboten ist, und die Formulareinreichung Algorithmus sagt genau das, was Anforderung generiert werden soll:

Speziell für PHP habe ich einige Tests mit Array-Namen in versteckten Eingängen und ich teile hier meine Ergebnisse:

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Post Hidden 2D Arrays</title>
  </head>
  <body>
    <form name="formtest" method="POST" target="_self">
      <input type="hidden" name="elem['name'][]" value="first">
      <input type="hidden" name="elem['name'][]" value="second">
      <input type="hidden" name="elem['name'][]" value="third">
      <input type="hidden" name="elem['name'][]" value="fourth">
      <input type="hidden" name="elem['type'][]" value="normal">
      <input type="hidden" name="elem['type'][]" value="classic">
      <input type="hidden" name="elem['type'][]" value="regular">
      <input type="hidden" name="elem['type'][]" value="basic">
      <input type="hidden" name="elem['size'][]" value="4">
      <input type="hidden" name="elem['size'][]" value="7">
      <input type="hidden" name="elem['size'][]" value="3">
      <input type="hidden" name="elem['size'][]" value="6">
      <input type="hidden" name="elem['form'][]" value="triangle">
      <input type="hidden" name="elem['form'][]" value="square">
      <input type="hidden" name="elem['form'][]" value="hexagon">
      <input type="hidden" name="elem['form'][]" value="circle">
      <input type="submit" name="sendtest" value="Test">
    </form>
    <xmp>
<?php
    print_r($_POST);
?>
    </xmp>
  </body>
</html>

das Formular abschicken erzeugt das nächste Ergebnis:

Array
(
[elem] => Array
    (
        ['name'] => Array
            (
                [0] => first
                [1] => second
                [2] => third
                [3] => fourth
            )
        ['type'] => Array
            (
                [0] => normal
                [1] => classic
                [2] => regular
                [3] => basic
            )
        ['size'] => Array
            (
                [0] => 4
                [1] => 7
                [2] => 3
                [3] => 6
            )
        ['temp'] => Array
            (
                [0] => triangle
                [1] => square
                [2] => hexagon
                [3] => circle
            )
    )
[sendtest] => Test
)

Nach diesem Ergebnis sehen habe ich mehr Tests ein besser aussehendes arrangieren von Array-Werten und endete mit diesem (ich nur die neuen versteckten Eingängen zeigen):

    <input type="hidden" name="elem[0]['name']" value="first">
    <input type="hidden" name="elem[1]['name']" value="second">
    <input type="hidden" name="elem[2]['name']" value="third">
    <input type="hidden" name="elem[3]['name']" value="fourth">
    <input type="hidden" name="elem[0]['type']" value="normal">
    <input type="hidden" name="elem[1]['type']" value="classic">
    <input type="hidden" name="elem[2]['type']" value="regular">
    <input type="hidden" name="elem[3]['type']" value="basic">
    <input type="hidden" name="elem[0]['size']" value="4">
    <input type="hidden" name="elem[1]['size']" value="7">
    <input type="hidden" name="elem[2]['size']" value="3">
    <input type="hidden" name="elem[3]['size']" value="6">
    <input type="hidden" name="elem[0]['temp']" value="triangle">
    <input type="hidden" name="elem[1]['temp']" value="square">
    <input type="hidden" name="elem[2]['temp']" value="hexagon">
    <input type="hidden" name="elem[3]['temp']" value="circle">

Beziehen dieses Ergebnis nach der Einreichung Form:

Array
(
[elem] => Array
    (
        [0] => Array
            (
                ['name'] => first
                ['type'] => normal
                ['size'] => 4
                ['temp'] => triangle
            )
        [1] => Array
            (
                ['name'] => second
                ['type'] => classic
                ['size'] => 7
                ['temp'] => square
            )
        [2] => Array
            (
                ['name'] => third
                ['type'] => regular
                ['size'] => 3
                ['temp'] => hexagon
            )
        [3] => Array
            (
                ['name'] => fourth
                ['type'] => basic
                ['size'] => 6
                ['temp'] => circle
            )
    )
[sendtest] => Test
)

Ich hoffe, das hilft ein wenig.

Ich glaube, dass es legal ist, zumindest in den Fällen von Radiobuttons und Kontrollkästchen. Wenn ich dynamisch Textbox Eingänge in XSLT hinzufügen, gebe ich sie alle den gleichen Namen; in ASP.NET, Request.Form [ "whatever_name"] ist ein String all diese Werte durch Komma getrennt.

Ich habe versucht, nur die gleiche Kontrolle Namen, Landkreise [] für mehr SELECT-Eingänge, so dass Landkreise in England, Schottland, Wales und Irland in jedem sind alle als Werte für den gleichen Parameter übergeben. PHP behandelt es in Ordnung, aber HTML-Validator gibt eine Warnung aus. Ich weiß nicht, ob alle Browser diese auf die gleiche Weise behandeln würden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top