Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the expected order of an array submitted in an HTML form?

I'm wondering if there is any sort of guarantee on the order of POST variables I will see on the server side.

My use case is I have a form that a user will fill out to enter a list of names and emails. I'm using a table rows, each of which has two inputs:

<table>
<tr>
<td><input type='text' name='name[]' /></td>
<td><input type='text' name='email[]' /></td>
</tr>
<tr>
<td><input type='text' name='name[]' /></td>
<td><input type='text' name='email[]' /></td>
</tr>
</table>

The row might be cloned via javascript to allow the user to type in more names and emails so I won't know ahead of time how many will be submitted.

On the server side, I see $_POST['email'] and $_POST['name'] set but I am wondering if I can safely assume $_POST['email'][0] will correspond to $_POST['name'][0], $_POST['email'][1] will correspond to $_POST['name'][1], and so on. Some basic testing seem to indicate yes but I'm wondering if there is a guarantee or if I'm just getting lucky.

like image 982
jhchen Avatar asked Sep 14 '10 20:09

jhchen


2 Answers

why not add a grouping key like:

<td><input type='text' name='user[0][name]' /></td>
<td><input type='text' name='user[0][email]' /></td>
</tr>
<tr>
<td><input type='text' name='user[1][name]' /></td>
<td><input type='text' name='user[1][email]' /></td>

and then manuall set the user indexes when you clone based on the current number. This way everything is already coallated.

like image 67
prodigitalson Avatar answered Oct 24 '22 04:10

prodigitalson


As Vaidas Zilionis said, data will appear in exact the same order as they appear in the form, see the W3C's HTML 4.01 Specification:

application/x-www-form-urlencoded
[...] 2. The control names/values are listed in the order they appear in the document.

multipart/form-data
[...] A "multipart/form-data" message contains a series of parts, each representing a successful control. The parts are sent to the processing agent in the same order the corresponding controls appear in the document stream.

like image 43
Arc Avatar answered Oct 24 '22 03:10

Arc