РЕГИСТРАЦИЯ Полей Формы с тем же Атрибутом Имени

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

38
задан danwellman 31 May 2016 в 21:51
поделиться

3 ответа

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

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

, который затем предоставит вам массив массивов для каждого имени в строке запроса.

73
ответ дан 27 November 2019 в 03:21
поделиться

Вы должны создать их массив: с name = inputname [] и получите сообщение, запрос или получите

$inputs = $_POST['inputname'];

print_r($inputs);
6
ответ дан 27 November 2019 в 03:21
поделиться

Только если имя типизировано для массива names [] , в этом случае вы получите массив как переменная в переменной $ _POST.

2
ответ дан 27 November 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: