PHP: getting flag values ​​when name does not have an array

The form that I do not control is the POSTing data for my PHP script. The form contains check boxes in the following lines:

<input type="checkbox" value="val1" name="option"/> <input type="checkbox" value="val2" name="option"/> 

If I wrote code for the form, I would write name="option[]" instead of name="option" . But this is not a change I can make. Now, if both checkboxes are checked, $_POST["option"] returns only one of the values. How can I get all selected values ​​in PHP?

+4
source share
1 answer

You can read the source data. For instance:

 <fieldset> <legend>Data</legend> <?php $data = file_get_contents("php://input"); echo $data."<br />"; ?> </fieldset> <fieldset> <legend>Form</legend> <form method="post" action="formtest.php"> <input type="checkbox" value="val1" name="option"/><br /> <input type="checkbox" value="val2" name="option"/><br /> <input type="submit" /> </form> </fieldset> 

Check both fields and output:

 option=val1&option=val2 

Here's a live demonstration . All you have to do is parse the string yourself in a suitable format. Here is an example of a function that does something like this:

 function parse($data) { $pairs = explode("&", $data); // process all key/value pairs and count which keys // appear multiple times $keys = array(); foreach ($pairs as $pair) { list($k,$v) = explode("=", $pair); if (array_key_exists($k, $keys)) { $keys[$k]++; } else { $keys[$k] = 1; } } $output = array(); foreach ($pairs as $pair) { list($k,$v) = explode("=", $pair); // if there are more than a single value for this // key we initialize a subarray and add all the values if ($keys[$k] > 1) { if (!array_key_exists($k, $output)) { $output[$k] = array($v); } else { $output[$k][] = $v; } } // otherwise we just add them directly to the array else { $output[$k] = $v; } } return $output; } $data = "foo=bar&option=val1&option=val2"; print_r(parse($data)); 

Outputs:

 Array ( [foo] => bar [option] => Array ( [0] => val1 [1] => val2 ) ) 

There may be several cases where this function does not work as expected, so be careful.

+14
source

All Articles