multi-dimensional array post from form

24,154

Solution 1

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...

Solution 2

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.

Solution 3

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.

Share:
24,154
Basit
Author by

Basit

Updated on July 09, 2022

Comments

  • Basit
    Basit almost 2 years

    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?

  • Basit
    Basit over 14 years
    what about users[][name], do i have to set the id (1, 2..)?
  • Franz
    Franz over 14 years
    Nope. You can go with users[], too.
  • denislexic
    denislexic about 13 years
    Awesome solution. Works like a charm. Thanks.
  • cregox
    cregox about 13 years
    @denislexic I'm really glad someone enjoyed it! :)
  • w3spi
    w3spi almost 9 years
    And simply the best solution. Thank you :)
  • Pila
    Pila over 6 years
    What about a situation where the number of users isn't predefined, say a user clicks a + button and a new set of fields opens and they can actually choose to not add any users
  • Franz
    Franz over 6 years
    @Pila Does the previous comment help?
  • Pila
    Pila over 6 years
    I ended up using jQuery to dynamically create new input fields with a name using a counter like so: name = "users["+i+"][name]"