Я создаю сайт подержанных автомобилей (написанный на 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 уже задал этот вопрос, и я не собираюсь писать сейчас. 🙂