Czy prawidłowe jest posiadanie dwóch elementów wejściowych o tej samej nazwie?


Odpowiedzi:


61

Tak, to jest ważne

To jest dobre

<form name="form1">
  <input type="hidden" name="url" value="1">
</form>

<form name="form2">
  <input type="hidden" name="url" value="2">
</form>

Jest to również w porządku i będzie generalnie interpretowane jako tablica wartości, np. W {url: [1, 2]}zależności od tego, co robi twój serwer. W kodowaniu adresu URL będzie to wyglądać url=1&url=2.

<form name="form1">
  <input type="hidden" name="url" value="1">
  <input type="hidden" name="url" value="2">
</form>

28
To jest ważne. Nie spowoduje to zamieszania w języku po stronie serwera (nawet PHP, z jego konwencjami nazewnictwa pól, które mają wspólną nazwę, będzie konsekwentnie i przewidywalnie obsługiwać wiele danych wejściowych, które nie używają tej konwencji). Nie spowoduje to zamieszania w JavaScript (który przedstawi elementy jako kolekcję i nie będzie ignorował żadnego z nich). Może / może / spowodować zamieszanie u autorów, którzy piszą kod nie wiedząc, co robią, ale specyfikacja jest w porządku.
— Quentin

@David Dorward: Dzięki za wyjaśnienie, usunąłem tę część.

14
Ten post jest mylący. wejścia o tej samej nazwie to ta sama forma są częścią standardu HTML - służą np. do checkboxów.
— beldaz

1
W jednym formularzu można umieścić wiele danych wejściowych (ukrytych lub innych) o tej samej nazwie. Co więcej, jest to bardzo przydatne przy przesyłaniu strukturalnych list lub map asocjacyjnych i często jest znacznie czystsze (i mniej kruche) niż hacky serializacja DIY.
— candu

1
Wiem, że to stary post, ale należy go wyjaśnić. PHP wymaga, abyś powiedział, że elementy tworzą tablicę w ten sposób: <code> <input type = "hidden" name = "url []" value = ....... </code> Jeśli nie zrób to, php weźmie ostatnią wartość z ostatniego pola i podłączy ją do tablicy formularza dla klucza "url".
— Mark C.

12

Tak.

Co więcej, jest to niezbędne, jeśli masz do czynienia z grupami przycisków opcji.


Dokładnie. Lub za pomocą pól wyboru, w którym to przypadku możesz umieścić [] na końcu „url []” i utworzy to tablicę do pobrania.
— Kerry Jones

2
@Kerry - To jest PHPizm. Większość bibliotek obsługujących formularze jest zadowolona, ​​że ​​nie ma specjalnych nazw dla grup kontrolek.
— Quentin

8

Komunikat „To nie jest dobre” jest poprawnie analizowany w każdej przeglądarce, którą znam; jeśli dwa adresy URL pojawią się w ciągu zakodowanym jako adres URL, zostanie on potraktowany jako tablica. Spróbuj tego w JQuery:

$('<form name="form1">\
     <input type="hidden" name="url" value="1">\
     <input type="hidden" name="url" value="2">\
</form>').serialize()

a otrzymasz: "url=1&url=2"

dobrze napisany parser ciągu zapytania zwróci strukturę JSON w następujący sposób:

 {"url":["1", "2"]}

Czy to ściśle specyfikacja? Nie, ale też nie tworzy wielowierszowego ciągu poprzez ucieczkę EOL z ukośnikiem odwrotnym, jak to zrobiłem powyżej.


6

Tak - każdy prześle tylko wraz z odpowiednimi formularzami.

Jeśli masz je w tej samej formie, jeden zastąpi drugi i nie jest ważny.

EDYCJA: Jak wskazał Mahmoodvcs, nadpisywanie występuje tylko w niektórych językach (takich jak PHP) i nie jest nieodłączne w samym HTML.


12
Mylisz się. Jeśli masz wiele wejść o tej samej nazwie, jedno nie zastąpi drugiego. Wszystkie dane wejściowe zostaną dołączone do treści żądania w kolejności, w jakiej pojawiają się w html. I to jest prawidłowe: formularz HTML z wieloma ukrytymi elementami sterującymi o tej samej nazwie
— Mahmoodvcs

5
@Mahmoodvcs: To nie jest do końca prawdą. Jeśli formularz zostanie wysłany do usługi PHP, wygrywa ostatnia wartość. Jeśli chcesz przypisać wiele wartości do nazwy, każda nazwa musi kończyć się na „[]”.
— Jeff Lowery

6
Mówimy tutaj o HTML, a nie PHP.
— Mahmoodvcs

2
@yardpenalty - Nie rozumiem twojego pytania (nie jestem pewien, czy Jeff odpowie), ale jeśli kwestionujesz umiejętności PHP, to na pewno prawda (przynajmniej przed PHP7 - nie sprawdziłem, czy się zmieniły to jeszcze)
— Kerry Jones

Przepraszam, że to rozgryzłem. Jeśli zamierzasz przetwarzać za pomocą php, musisz utworzyć tablicę nazw. Myślę, że to bootstrap potrzebuje przycisków radiowych, aby miały taką samą nazwę czy coś. W każdym razie tak, możesz.
— yardpenalty.com


2

A) Twój pierwszy przykład jest w porządku, ponieważ czas składania formularzy będzie inny:

<form id="1">
    <input type="hidden" name="url" value="1">  
</form>
<form id="2">
    <input type="hidden" name="url" value="2">  
</form>

B) Twój drugi przykład również jest w porządku, ale nie jest to standardowa praktyka kodowania:

<form>
    <input type="hidden" name="url" value="1">  
    <input type="hidden" name="url" value="2">  
</form>

Kod Java dwa wyodrębnia obie wartości:

Map<String,String[]> parmMap = requestObj.getParameterMap();   
String input1 = parmMap.get("url")[0];   
String input2 = parmMap.get("url")[1];
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.