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