У меня есть форма, где я добавил группу флажков, как показано ниже:
<form action="next.php" method="get"> <input name="c1" value="1" type="checkbox"> <input name="c1" value="2" type="checkbox"> <input name="c1" value="3" type="checkbox"> <input name="c1" value="4" type="checkbox"> ... </form>
Если я выберу первый и третий флажки, URL-адрес выглядит хорошо, когда я нажимаю кнопку отправки, например
?c1=1&c1=3 [...]
но массив $ _GET содержит только последнее значение c1. Я знаю, что могу использовать нотацию []
для получения массива, но тогда ссылка выглядит так:
?c1[]=1&c1[]=3 [...]
Я видел сайты, которые генерируют URL-адрес без []
и все еще удается учитывать все значения. Как они это делают ?
Спасибо !
PHP требует, чтобы вы использовали нотацию псевдо-массива, если вы хотите использовать одно и то же имя поля для нескольких разных элементов формы:
<input type="checkbox" name="c1[]" ... /> <input type="checkbox" name="c1[]" ... /> <input type="checkbox" name="c1[]" ... /> etc...
[]
Указывает PHP обрабатывать c1
как массив и сохранять все представленные значения. Без []
PHP будет просто перезаписывать каждое предыдущее значение c1 новым, пока обработка формы не будет выполнена.
Сайты, которые не используют нотацию []
, обрабатывают сами формы, извлекают строку запроса из $_SERVER['QUERY_STRING']
а затем сами анализируют ее.
Использование должно использовать это:
<input name="c1[]" value="1" type="checkbox"> <input name="c1[]" value="2" type="checkbox"> <input name="c1[]" value="3" type="checkbox"> <input name="c1[]" value="4" type="checkbox">
Вы можете получить доступ ко всей цепочке. Вы можете разыскать запрос на такие части:
$qs = explode("&",$_SERVER['QUERY_STRING']); foreach ($qs as $part) { if (strpos($part,"c1") !== false) { $split = strpos($part,"="); $values[] = substr($part, $split + 1); } } var_dump($values);
Если ваш запрос выглядит следующим образом:? C1 = 1 & c1 = 3, код выше дает вам следующий результат:
array(2) { [0]=> string(1) "1" [1]=> string(1) "3" }