Отправка нескольких вариантов флажков - PullRequest
5 голосов
/ 18 апреля 2010

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

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

Спасибо.

Ответы [ 5 ]

5 голосов
/ 18 апреля 2010

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

<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')
2 голосов
/ 18 апреля 2010

Хорошо, ребята, спасибо всем за ваши ответы. Я придумал решение с использованием 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"/>
...
2 голосов
/ 18 апреля 2010

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

<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
          }
     }

}
0 голосов
/ 18 апреля 2010

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

0 голосов
/ 18 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...