2010-04-17 33 views
5

Tworzę stronę internetową samochodów używanych (napisaną w PHP) i utknąłem na wysyłaniu zaawansowanych opcji wyszukiwania z formularza. Mam ich więcej niż 30 i zastanawiam się, czy jest to możliwe i jak wysłać je w jednej zmiennej (na przykład &options=1,2,3,5,6,10 lub w inny sposób ..).Wysyłanie wielu opcji pola wyboru

Również słyszałem, że jest to możliwe z "bitowym", ale nie mam pojęcia, jak to zrobić. Lub jeśli ktoś ma lepszy pomysł, proszę dać mi znać.

Dzięki.

Odpowiedz

5

Możesz wysłać je w tablicy.

<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') 

Można nawet użyć tablice wielowymiarowe:

<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') 
+0

Dziękuję bardzo, ale chcę wysłać je za pomocą GET nie POST .. –

+0

Działa to w ten sam sposób. Po prostu zamień method = "post" na method = "get" i $ _POST na $ _GET. –

+0

yup my bad: D. Ale mam ogromną "kiełbasę" w adresie URL :) –

2

umieścić je w tablicy i pętli przez nich w skrypcie, który przetwarza formularz.

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

Kluczem jest umieszczenie wartości checkbox w tablicy. option[]

Następnie w swoim skrypcie możesz uzyskać dostęp do tablicy i przeglądać przesłane opcje.

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

Można napisać skrypt, który dokonuje iteracji wszystkich dziedzinach (tj pola wyboru), zbiera informacje w ukrytym polu w dokładnej formie przedstawionej przez Ciebie (1,3,5 oznaczałoby 1 3 i 5 jest sprawdzonych, 2 i 4 są odznaczone).

Przekształcenie w reprezentację bitową sprawiłoby, że tworzenie i dekompilacja byłyby bardziej skomplikowane. Na przykład w poprzednim przykładzie można wysłać numer 10101 == 17, aby przedstawić lokalizację (tj. Lokalizacje 1 3 5 są włączone, a 2 i 4 są wyłączone). Znowu nie jest to łatwe i niezalecane. [Możesz również wysłać binarną reprezentację, w takim przypadku wyślesz wysłać 1000 == 8 == 1 + 3 + 5 ---- jeszcze bardziej złożona]

2

Ok, dziękuję wszystkim za odpowiedzi. Wymyśliłem rozwiązanie przy użyciu jQuery. Zebrałem wszystkie wartości z pól wyboru w tablicy i przypisz tę tablicę do jednego ukrytego pola. Wszystkie te opcje są poza formularzem i nie są przesyłane.

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

i forma:

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

i poza postaci przechodzi wszystkie opcje dostępne

... 
<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"/> 
... 
0

żądania GET wygeneruje długie, skomplikowane adresy URL z tym wiele opcje z domyślnym zachowaniem.

Żądania POST mogą zawierać krótkie adresy URL, ale mogą się źle wyświetlać za pomocą przycisku "wstecz" i nie są przyjazne zakładkom.

Do generowania krótkich adresów URL za pomocą GET potrzebny jest skrypt pośredni, który przetłumaczył wybrane opcje na coś bardziej zwięzłego lub konieczne jest obserwowanie wybranych opcji przy użyciu JavaScript i utworzenie strony zwanej małym klientem URL.

Matematyka bitowa oznaczać będzie przypisanie każdego bitu lub grupy bitów w pojedynczej zmiennej do danej opcji i predefiniowanego zestawu wartości. Na przykład 32-bitowy może stanowić 8 atrybutów 4 bitów każda:

01010010010001001010101010101001 

, czyli

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

więc liczba całkowita może stanowić ośmiu cech, z 16 możliwych wartości, na 4 grupy bitów. Oczywiście wymaga to opracowania, ale jestem pewien, że ktoś z SO już zadał to pytanie i nie mam zamiaru pisać dalej. :)