Если у Вас есть форма, содержащая вводы текста с дубликатом 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 = inputname []
и получите сообщение, запрос или получите
$inputs = $_POST['inputname'];
print_r($inputs);
Только если имя типизировано для массива names []
, в этом случае вы получите массив как переменная в переменной $ _POST.