Если у вас есть форма, содержащая текстовые входы с атрибутами двойного name
, и форма размещена, вы все равно сможете получить значения всех полей из массива $_POST
в PHP?
Нет. Будет доступен только последний элемент ввода.
Если вы хотите, чтобы несколько входов с одинаковым именем использовали name="foo[]"
для атрибута имени ввода. $_POST
будет содержать массив для foo со всеми значениями из входных элементов.
<form method="post"> <input name="a[]" value="foo"/> <input name="a[]" value="bar"/> <input name="a[]" value="baz"/> <input type="submit" /> </form>
См. Ссылку HTML на Sitepoint .
Причина, по которой $_POST
будет содержать только последнее значение, если вы не используете []
заключается в том, что PHP будет просто просто взорваться и запросить строку необработанного запроса для заполнения $_POST
. Когда он встречает пару имен / значений, которая уже существует, она перезапишет предыдущую.
Тем не менее, вы все равно можете получить доступ к строке необработанного запроса следующим образом:
$rawQueryString = file_get_contents('php://input'))
Предполагая, что у вас есть такая форма:
<form method="post"> <input type="hidden" name="a" value="foo"/> <input type="hidden" name="a" value="bar"/> <input type="hidden" name="a" value="baz"/> <input type="submit" /> </form>
$ rawQueryString
будет тогда содержать a=foo&a=bar&a=baz
.
Затем вы можете использовать свою собственную логику для синтаксического анализа этого массива. Наивный подход
$post = array(); foreach (explode('&', file_get_contents('php://input')) as $keyValuePair) { list($key, $value) = explode('=', $keyValuePair); $post[$key][] = $value; }
который затем предоставит вам массив массивов для каждого имени в строке запроса.
Вместо name="nfo[val]"
просто используйте name="nfo[val][]"
а в PHP вы можете использовать foreach()
Код HTML:
<form method="post"> <input name="nfo[val][]" value="val1"/> <input name="nfo[val][]" value="val2"/> <input name="nfo[val][]" value="val3"/> <input type="submit" /> </form>
PHP-код:
$output=''; foreach ($nfo['val'] as $key=>$val) { $output.= $val.", "; }
$output
будет: val1, val2, val3
Надеюсь это поможет!
Вы должны создать массив из них: с name=inputname[]
и получить сообщение, запрос или получить
$inputs = $_POST['inputname']; print_r($inputs);
Только в том случае, если имя является типом массива names[]
в этом случае вы получите массив как переменную переменной $ _POST.