Отправка нескольких флажков

Я создаю сайт подержанных автомобилей (написанный на PHP), и я застрял в отправке расширенных параметров поиска из формы. У меня более 30 из них, и мне интересно, можно ли и как отправить их в одну переменную (например, &options=1,2,3,5,6,10 или каким-либо другим способом ..).

Также я слышал, что это возможно с «поразрядным», но я не знаю, как это сделать. Или, если у кого-то есть лучшая идея, пожалуйста, дайте мне знать.

Благодарю.

Вы можете отправить их в массив.

 <form method="post"> <input type="checkbox" name="param[]" value="blue" /> <input type="checkbox" name="param[]" value="red" /> <input type="checkbox" name="param[]" value="orange" /> <input type="checkbox" name="param[]" value="green" /> <input type="checkbox" name="param[]" value="black" /> <input type="submit" value="Submit" /> </form> >> $_POST['param'] array('blue', 'orange') 

Вы даже можете использовать многомерные массивы:

 <form method="post"> <input type="checkbox" name="param[color][]" value="blue" /> <input type="checkbox" name="param[color][]" value="red" /> <input type="checkbox" name="param[color][]" value="orange" /> <input type="checkbox" name="param[color][]" value="green" /> <input type="checkbox" name="param[color][]" value="black" /> <input type="checkbox" name="param[year][]" value="1999" /> <input type="checkbox" name="param[year][]" value="2000" /> <input type="checkbox" name="param[year][]" value="2001" /> <input type="checkbox" name="param[year][]" value="2002" /> <input type="checkbox" name="param[year][]" value="2003" /> <input type="submit" value="Submit" /> </form> >> $_POST['param']['color'] array('blue', 'green') >> $_POST['param']['year'] array('2001', '2004') 

Поместите их в массив и проведите через них в скрипте, который обрабатывает форму.

 <form action="yourscript.php" method="POST"> <label for="option1">Option 1</label> <input id="option1" type="checkbox" name="option[]" value="option1" /> <label for="option2">Option 2</label> <input id="option2" type="checkbox" name="option[]" value="option2" /> <label for="option3">Option 3</label> <input id="option3" type="checkbox" name="option[]" value="option3" /> <input type="submit" name="submit" value=Submit /> </form> 

Ключ должен поместить ваши значения флажка в массив. option[]

Затем в вашем скрипте вы можете получить доступ к массиву и выполнить петлю через предоставленные параметры.

 if(!empty($_POST['submit']) //process the form if(!empty($_POST['option']) //check to see if any checkboxes were selected { $options = $_POST['option']; foreach($options as $option) //loop through the checkboxes { //do what you need to do with an option } } } 

Хорошо, ребята, спасибо всем за ваши ответы. Я придумал решение с помощью jQuery. Я собрал все значения из этих флажков в массиве и назначил этот массив одному скрытому полю. Все эти параметры находятся вне формы, и они не отправляются.

JavaScript:

 $('.options').click(function() { var selectedItems = new Array(); $("input:checkbox[name='opt[]']:checked").each(function() {selectedItems.push($(this).val());}); var data = selectedItems.join('|'); $("#opts").val(data); }); 

и форму:

 <form name="search" method="get" action="blabla.php"> ..... <input type="hidden" name="options" id="opts" value=""/> .... </form> 

и вне формы все доступные варианты

 ... <input type="checkbox" name="opt[]" class="options" value="1"/> <input type="checkbox" name="opt[]" class="options" value="2"/> <input type="checkbox" name="opt[]" class="options" value="3"/> ... 

Вы можете написать скрипт, который выполняет итерацию по всем вашим полям (т.е. флажкам), собирает информацию в скрытое поле в точной форме, которую вы представили (1,3,5 означает, что 1 3 и 5 проверены, 2 и 4 не отмечены).

Превратив его в небольшое представление, было бы сложнее построить и деконструкцию. Например, в первом примере вы можете отправить номер 10101 == 17 для представления местоположения (т.е. местоположения 1 3 5 «включены», 2 и 4 выключены). Опять же, не так просто и не рекомендуется. [Вы также можете отправить двоичное представление, и в этом случае вы отправите send 1000 == 8 == 1 + 3 + 5 —- еще сложнее]

Запросы GET будут генерировать длинные сложные URL-адреса с таким количеством параметров, что и поведение по умолчанию.

Запросы POST могут оставить вас с короткими URL-адресами, но могут плохо работать с кнопкой «назад» и не являются дружественными к закладкам.

Чтобы генерировать короткие URL-адреса с помощью GET, вам нужен либо промежуточный скрипт, переводящий выбранные параметры в нечто более компактное, или вам нужно будет наблюдать выбранные параметры с помощью JavaScript и создавать компактную URL-адрес клиента.

Побитовая математика означала бы присвоение каждому биту или группе битов в одной переменной заданной опции и предопределенному набору значений. Например, 32-битное целое число может представлять 8 атрибутов по 4 бита каждый:

 01010010010001001010101010101001 

Или:

 0101 0010 0100 0100 1010 1010 1010 1001 #8 #7 #6 #5 #4 #3 #2 #1 

Таким образом, одно целое число может представлять восемь атрибутов с 16 возможными значениями для 4-битной группы. Очевидно, что это требует разработки, но я уверен, что кто-то из SO уже задал этот вопрос, и я не собираюсь писать сейчас. 🙂