Несколько чекбоксов с одинаковым именем
согласно w3c " несколько флажков в форме могут иметь одно и то же имя элемента управления. Таким образом, например, флажки позволяют пользователям выбирать несколько значений для одного и того же свойства."Однако, если вы это сделаете, PHP будет принимать только последнее значение. Например:
<?php
if ($_POST) {
echo "<pre>";
print_R($_POST);
echo "</pre>";
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet" value="dog" />Dog<br />
<input type="checkbox" name="pet" value="Cat" />Cat<br />
<input type="checkbox" name="pet" value="bird" />bird<br />
<input type="checkbox" name="pet" value="iguana" />iguana<br />
<input type="submit" />
</form>
Если вы отправите эту форму, вы увидите, что будет установлен только флажок, который появляется последним. Браузер отправляет их все, но они перезаписывают друг друга. Таким образом, установка одного и того же имени на несколько флажков может вызвать проблемы. Так было всегда? Кажется, я помню, что можно было фактически отправить все значения в виде массива.
Я знаю, что вы можете просто добавить [] в конце имени, чтобы создать массив значений:
<?php
if ($_POST) {
echo "<pre>";
print_R($_POST);
echo "</pre>";
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet[]" value="dog" />Dog<br />
<input type="checkbox" name="pet[]" value="Cat" />Cat<br />
<input type="checkbox" name="pet[]" value="bird" />bird<br />
<input type="checkbox" name="pet[]" value="iguana" />iguana<br />
<input type="submit" />
</form>
но w3c не указывает это. Честно говоря, я не помню, всегда ли я использовал [] в конце имени, но по какой-то причине я думаю, что в какой-то момент я этого не сделал. Было ли когда-нибудь в прошлом время, когда вы могли бы заставить его работать без []?
2 ответов
Это никогда бы не сработало без []
, не в PHP.
W3C ничего не указывает о том, как строки запроса обрабатываются на стороне сервера. (Игнорируя несущественное,устаревший угол спецификации CGI, имеет отношение только к PHP, поскольку до недавнего времени это была дыра в безопасности).
похоже, что этот шаблон является допустимой разметкой, но обычно не используется по причине, которую вы описываете.
аналогичная картина и используется для радио кнопки, из которых одновременно можно выбрать только одну. (На самом деле, давая радио входы с тем же именем, как браузер знает, чтобы рассматривать их как группу). Возможно, именно об этом вы и думали.
Если вы действительно хотите его в PHP, попробуйте это:
<?php
if (count($_POST)) {
header("Content-type: text/plain");
$fp = fopen("php://input", "r");
fpassthru($fp);
fclose($fp);
exit;
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet" value="dog" />Dog<br />
<input type="checkbox" name="pet" value="Cat" />Cat<br />
<input type="checkbox" name="pet" value="bird" />bird<br />
<input type="checkbox" name="pet" value="iguana" />iguana<br />
<input type="submit" />
</form>
подробнее о php://input
поток можно найти в PHP документации.