Форма, в которой я не контролирую, – это POSTing данные для моего PHP-скрипта. Форма содержит флажки в этих строках:
<input type="checkbox" value="val1" name="option"/> <input type="checkbox" value="val2" name="option"/>
Если бы я написал код для формы, я бы name="option[]"
вместо name="option"
. Но это не изменение, которое я могу сделать. Теперь, если оба флажка отмечены, $_POST["option"]
возвращает только одно из значений. Как я могу, в PHP получить все выбранные значения?
Вы можете прочитать исходные данные. Например:
<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>
Проверьте оба поля и вывод:
option=val1&option=val2
Вот живая демонстрация . Все, что вам нужно сделать, это разобрать строку самостоятельно в подходящем формате. Вот пример функции, которая делает что-то вроде этого:
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));
Выходы:
Array ( [foo] => bar [option] => Array ( [0] => val1 [1] => val2 ) )
Могут быть несколько случаев, когда эта функция работает не так, как ожидалось, поэтому будьте осторожны.