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

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

4 ответа

Решение

Нет. Будет доступен только последний элемент ввода.

Если вы хотите несколько входов с одним и тем же именем, используйте 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.

Другие вопросы по тегам