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

Если у вас есть форма, содержащая текстовые входы с дублирующими атрибутами name, и форма размещена, вы все равно сможете получить значения всех полей из массива $_POST в PHP?

Ответ 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.