Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

multi-dimensional array post from form

I want to know how i can post a multi-dimensional array?

Basically i want to select a user and selected user will have email and name to sent to post.

So selecting 100 users, will have email and name. I want to get in PHP like following

$_POST['users'] = array(
  array(name, email),
  array(name2, email2),
  array(name3, email3)
);

Any ideas?

like image 802
Basit Avatar asked Nov 12 '09 00:11

Basit


3 Answers

You can name your form elements like this:

<input name="users[1][name]" />
<input name="users[1][email]" />
<input name="users[2][name]" />
<input name="users[2][email]" />
...

You get the idea...

like image 110
Franz Avatar answered Oct 14 '22 00:10

Franz


Here's another way: serialize the array, post and unserialize (encrypting optional).

And here's an example that worked for me:

"send.php":

<input type="hidden" name="var_array" value="<?php echo base64_encode(serialize($var_array)); ?>">

"receive.php":

if (isset($_POST['var_array'])) $var_array = unserialize(base64_decode($_POST['var_array']));

With that you can just use $var_array as if it were shared between the two files / sessions. Of course there need to be a <form> in this send.php, but you could also send it on an <a> as a query string.

This method has a big advantage when working with multi-dimensional arrays.

like image 21
cregox Avatar answered Oct 13 '22 22:10

cregox


Well, you are going to have to do some looping somewhere. If you name each form element with an index (as Franz suggests), you do the looping on the PHP side.

If you want to use Javascript to do the looping, have your form onSubmit() create a JSON string to pass to the PHP. Then have the PHP retrieve it like so:

json_decode($_POST['users'], true);

The second argument tells it to make arrays instead of anonymous objects.

like image 37
Benjamin Cox Avatar answered Oct 13 '22 23:10

Benjamin Cox