Birden fazla onay kutusu Gönderme seçenekleri

5 Cevap php

Ben (PHP ile yazılmış) bir ikinci el araba web sitesi oluşturma, ve ben formdan gelişmiş arama seçeneklerini gönderme üzerinde şaşırıp. Onlardan fazla 30 var ve ben bunun mümkün olmadığını merak ediyorum, nasıl, bir değişken bunları göndermek için (örneğin, &options=1,2,3,5,6,10 ya da başka bir şekilde ..).

Ayrıca ben bu "bitsel" ile mümkün ama bunu yapmak için nasıl bir ipucu yok olduğunu duydum. Ya birisi daha iyi bir fikrin varsa, lütfen bana bildirin.

Teşekkürler.

5 Cevap

Sen onları bir diziye gönderebilirsiniz.

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

Hatta çok boyutlu diziler kullanabilirsiniz:

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

Tamam beyler cevaplarınız için teşekkür ederim. JQuery kullanarak bir çözüm ile geldim. Ben dizide bu onay kutularını tüm değerleri toplandı ve bir gizli alana bu diziyi atayın ettik. Tüm bu seçenekler form dışında ve onlar submited değiliz.

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

ve formu:

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

ve form dışında tüm seçenekler gider

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

Formu işleyen komut içlerinden bir dizi ve döngü onları yerleştirin.

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

Anahtar bir dizi halinde onay kutusu değerleri yerleştirmektir. option[]

Sonra komut, size sunulan seçenekler arasında dizi ve döngü erişebilirsiniz.

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

}

Tüm alanlarda (yani onay kutularını) dolaşır, sen (1,3,5, 1, 3 ve 5 kontrol anlamına 2 ve olurdu sunduk tam formunda, gizli bir alana bilgi toplayan bir komut dosyası yazabilirsiniz 4) denetlenmeyen.

Biraz temsil dönüştürerek, inşa ve de-yapı için daha karmaşık hale getirecektir. Örneğin, önceki örnekte, sen numaralı (yani yerleri 1 3 5 "üzerinde", 2 ve 4 kapalı olan) bir konumu temsil 10101 == 17. gönderebilirsiniz. Yine, o kadar kolay değil, tavsiye edilmez. [Ayrıca gönderme 1000 == 8 == 1 + 3 + 5 göndermek istiyorum, bu durumda ikili gösterimini göndermek ---- daha da karmaşık olabilir]

Istekleri varsayılan davranışıyla birçok seçenekleri ile uzun, karmaşık URL'ler üretecektir GET.

POST istekleri kısa URL'ler ile bırakabilirsiniz, ama "Geri" tuşu ile kötü davranabilir ve samimi imi değildir.

GET ile kısa URL'ler oluşturmak için, daha kompakt bir şey seçilen seçenekleri tercüme aracı komut dosyası gerekir, ya sen JavaScript kullanarak seçilen seçenekleri gözlemlemek ve kompakt URL istemci tarafı oluşturmak gerekir.

Bit matematik belirli bir seçeneği ve değerler önceden tanımlanmış tek bir değişken her bit veya bit grubu atama anlamına gelecektir. Örneğin 32 bitlik tamsayı 4 bit her 8 özelliklerini temsil edebilir:

01010010010001001010101010101001

Veya:

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

Yani bir tam sayı 4 bitlik grup başına 16 olası değerlere sahip, sekiz özelliklerini temsil edebilir. Açıkçası özen gerektirir, ama ben SO zaten bu soruyu sordu üzerinde emin biriyim ve ben daha çok şu anda herhangi yazarak kadar değilim. :)