2010-04-17 13 views
5

Sto creando un sito Web di auto usate (scritto in PHP) e sono bloccato sull'invio di opzioni di ricerca avanzate dal modulo. Ne ho più di 30 e mi chiedo se è possibile, e come, inviarli in una variabile (ad esempio &options=1,2,3,5,6,10 o in un altro modo ..).Invio di più opzioni casella di controllo

Inoltre ho sentito che questo è possibile con "bitwise" ma non ho la minima idea di come farlo. O se qualcuno ha un'idea migliore, per favore fatemelo sapere.

Grazie.

risposta

5

È possibile inviarli in un array.

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

È anche possibile usare array multidimensionali:

<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

Grazie mille, ma voglio inviarli usando GET non POST .. –

+0

Funziona allo stesso modo. Sostituisci method = "post" con method = "get" e $ _POST con $ _GET. –

+0

sì mio male: D. Ma ho un'enorme "salsiccia" nell'URL :) –

2

metterli in un array e ciclo attraverso di loro nello script che elabora la forma.

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

La chiave è inserire i valori della casella di controllo in una matrice. option[]

Quindi, nello script, è possibile accedere alla matrice e scorrere tra le opzioni inviate.

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

È possibile scrivere uno script che consente di scorrere tutti i campi (ad esempio caselle di controllo), raccoglie le informazioni in un campo nascosto, nella forma precisa di aver presentato (1,3,5 significherebbe 1 3 e 5 sono spuntati, 2 e 4 sono deselezionati).

Trasformarlo in una rappresentazione bit, renderebbe più complesso costruire e de-costruire. Ad esempio, nell'esempio precedente, è possibile inviare il numero 10101 == 17 per rappresentare una posizione (ad esempio, le posizioni 1 3 5 sono "on", 2 e 4 sono disattivate). Di nuovo, non così facile, e non raccomandato. [Potresti anche inviare una rappresentazione binaria, nel qual caso manderesti inviare 1000 == 8 == 1 + 3 + 5 ---- ancora più complesso]

2

Ok ragazzi, grazie a tutti per le vostre risposte. Ho trovato una soluzione usando jQuery. Ho raccolto tutti i valori da queste caselle di controllo in array e ho assegnato questo array a un campo nascosto. Tutte queste opzioni sono esterne al modulo e non vengono inviate.

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

e la forma:

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

e al di fuori del modulo va tutte le opzioni disponibili

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

richieste GET genererà lunghi, URL complicati con che molti opzioni con il comportamento predefinito.

Le richieste POST possono lasciare URL brevi, ma possono comportarsi male con il pulsante "indietro" e non sono segnalibri.

Per generare URL brevi con GET, è necessario uno script intermedio che traduce le opzioni selezionate in qualcosa di più compatto, oppure è necessario osservare le opzioni selezionate utilizzando JavaScript e creare l'URL lato client compatto.

La matematica per bit significherebbe assegnare ogni bit o gruppo di bit in una singola variabile a una determinata opzione e un insieme predefinito di valori. Ad esempio un numero intero di 32 bit potrebbe rappresentare 8 attributi di 4 bit ciascuna:

01010010010001001010101010101001 

Oppure:

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

Così un intero potrebbe rappresentare otto attributi, con 16 valori possibili per gruppo 4 bit. Ovviamente ciò richiede un'elaborazione, ma sono sicuro che qualcuno su SO ha già fatto questa domanda e non sono più in grado di scrivere ora. :)

Problemi correlati