0plus1
0plus1

Reputation: 4555

Is it possible to group $_POST variables?

I have a huge form (for an internal CMS) that is comprised by several sections, some of them are optional some of them are compulsory. All is under an humungous form (it has to be like this, no ajax, no other ways :-( )

Since in a Dilbertesque way everything get changed every second I was wondering if there is any simple way of grouping $_POST data, I mean sending POST like this:

$_POST['form1']['datax']

or to retrieve data from server side easily, and by easily I mean withouth having to expressily declare:

$array1 = array($_POST['datax'],$_POST['datay'],...);

$array2 = array($_POST['dataalpha'],$_POST['dataomega'],...);

since there are around 60 fields.

I hope I was able to explain this well and as always thank you very much..

Upvotes: 12

Views: 4360

Answers (4)

homelessDevOps
homelessDevOps

Reputation: 20726

you can use your form fields like this:

<input type="text" name="form1['datax']"/>

Upvotes: 1

nickf
nickf

Reputation: 546203

If you give your input elements array-like names, they arrive in the PHP $_POST (or $_GET) array as an array:

<input type="text" name="foo[]" value="a"/>
<input type="text" name="foo[]" value="b" />
<input type="text" name="foo[]" value="c" />
<input type="text" name="foo[bar]" value="d" />
<input type="text" name="foo[baz][]" value="e" />
<input type="text" name="foo[baz][]" value="f" />

Goes to:

print_r($_POST)
foo => array (
    0 => a
    1 => b
    2 => c
    bar => d
    baz => array(
        0 => e
        1 => f
    )
)

Upvotes: 29

Mike A.
Mike A.

Reputation: 398

If you name your inputs properly, you can do that. Example:

<input type="text" name="textInput[]" />
<input type="text" name="textInput[]" />

That will populate an array in $_POST named textInput. That is:

$_POST['textInput'][0] == "whatever the first was set to be"
$_POST['textInput'][1] == "whatever the second was set to be"

Upvotes: 5

slikts
slikts

Reputation: 8158

Using square brackets after the input name will cause it to be grouped in PHP:

<input name="foo[]" type="text" value="1" />
<input name="foo[]" type="text" value="2" />

You can also make an associative array:

<input name="foo[bar]" type="text" />

I think multi-dimensional arrays would also work, but I'm not sure if I've actually tried it.

Edit: Here's the same thing answered in the PHP FAQ.

Upvotes: 3

Related Questions