2009-11-06 6 views
8

Vedo spesso, in particolare nel mondo PHP, la seguente scrittura se si desidera creare una matrice FORM.Parentesi quadrate in matrici di moduli HTML. Solo convenzionale o con un significato?

<input name="MyArray[]" /> 
<input name="MyArray[]" /> 

con le parentesi quadre []. Tuttavia, l'operazione di invio passa semplicemente la stessa voce chiave due volte. Sembra che il [] è solo convenzionale che mappa bene alla matrice mondo PHP, ma si otterrebbe lo stesso risultato con solo il seguente

<input name="MyArray" /> 
<input name="MyArray" /> 

Infatti, in Django ho un elenco di due voci, a prescindere dalla lo stile usato

È vero? La [] è solo convenzionale, o in realtà contiene un vero significato dalle informazioni chiave/valore HTML e HTTP?

risposta

10

Si rivolgono a una limitazione di PHP, che non genera automaticamente un array se vengono inviati più valori con lo stesso nome, ad esempio da un set di checkbox o una selezione multipla. (IIRC restituisce solo l'ultimo valore)

Personalmente ho sempre pensato che fosse una soluzione piuttosto scadente. Anche l'ASP classico può farcela senza richiedere aggiunte al client sul markup. La piattaforma lato server non ha attività che impongono requisiti di markup sul client in questo modo.

+0

Penso che sia stata solo una decisione di progettazione. Non lo vedo come una limitazione. –

+1

È una limitazione se si prendono moduli esistenti che funzionano perfettamente con qualsiasi altra piattaforma lato server e si tenta di usarli con PHP: è necessario modificare i valori di tutti gli attributi dei nomi degli elementi rilevanti e guai se ne manchi uno. È un'astrazione inutilmente lacerante: l'HTML non dovrebbe preoccuparsi del fatto che il server usa matrici, per non parlare del fatto che utilizza la sintassi di indicizzazione dell'array in stile C. – NickFitz

+0

+1 '[]' è stato uno dei primi errori di progettazione e uno di quelli che PHP non è riuscito a correggere da allora. Un modo diverso per accedere ai parametri quando si desidera ottenere più valori sarebbe stato migliore, ma non sarebbe stato adattato con la strategia originale 'register_globals'. – bobince

1

È solo convenzionale.


Il W3C states:

Facciamo il form data set essere un elenco di nome-valore-tipo tuple

e per ogni elemento di input, su Invia:

Aggiungere una voce allo form data set con nome come name, il valore dell'elemento field come valore e type come tipo.

Il W3C non menziona l'uso di [] o unicità dell'attributo name.

Problemi correlati