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

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

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

Спасибо.

5
задан Nick Garvey 7 February 2012 в 15:58
поделиться

5 ответов

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

<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')
5
ответ дан 14 December 2019 в 01:04
поделиться

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

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

0
ответ дан 14 December 2019 в 01:04
поделиться

Поместите их в массив и пропустите их в сценарии, обрабатывающем форму.

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

}
2
ответ дан 14 December 2019 в 01:04
поделиться

Хорошо, ребята, спасибо всем за ответы. Я придумал решение, использующее 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
ответ дан 14 December 2019 в 01:04
поделиться

Запросы 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
ответ дан 14 December 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: