Ответ 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;
}
который затем предоставит вам массив массивов для каждого имени в строке запроса.