Поля формы POSTing с одинаковым атрибутом имени

Если у вас есть форма, содержащая текстовые входы с атрибутами двойного 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.