Поля формы 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.