Если у вас есть форма, содержащая текстовые входы с дублирующими атрибутами name
, и форма размещена, вы все равно сможете получить значения всех полей из массива $_POST
в PHP?
Поля формы POSTing с одинаковым атрибутом имени
Ответ 1
Нет. Будет доступен только последний элемент ввода.
Если вы хотите, чтобы несколько входов с одинаковым именем использовали 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;
}
который затем предоставит вам массив массивов для каждого имени в строке запроса.
Ответ 2
Вместо 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
Надеюсь, это поможет!
Ответ 3
Вам нужно создать массив из них:
с name=inputname[]
и получить с сообщением, запросить или получить
$inputs = $_POST['inputname'];
print_r($inputs);
Ответ 4
Только если имя задано в массиве names[]
, в этом случае вы получите массив как переменную переменной $_POST.