2010-04-17 19 views
5

Estoy creando un sitio web de autos usados ​​(escrito en PHP) y estoy atascado en el envío de opciones de búsqueda avanzada desde el formulario. Tengo más de 30 de ellos y me pregunto si es posible y cómo enviarlos en una variable (por ejemplo, &options=1,2,3,5,6,10 o de otra manera ...).Envío de múltiples opciones de casillas de verificación

También he oído que esto es posible con "bitwise" pero no tengo ni idea de cómo hacerlo. O si alguien tiene una idea mejor, házmelo saber.

Gracias.

Respuesta

5

Puede enviarlos en una matriz.

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

Usted puede incluso utilizar matrices multidimensionales:

<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

Muchas gracias, pero quiero enviarlas usando GET no POST .. –

+0

Funciona de la misma manera. Simplemente reemplace method = "post" con method = "get" y $ _POST con $ _GET. –

+0

yup my bad: D. Pero tengo una gran "salchicha" en la URL :) –

2

colocarlos en una matriz y bucle a través de ellos en el script que procesa el formulario.

<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 clave es colocar los valores de su casilla de verificación en una matriz. option[]

Luego en su secuencia de comandos, puede acceder a la matriz y recorrer las opciones enviadas.

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

Puede escribir un script que itera a través de todos sus campos (es decir, casillas de verificación), recoge la información en un campo oculto, en la forma exacta que ha presentado (1,3,5 significaría 1 3 y 5 están marcados, 2 y 4 están desmarcados).

Si lo convierte en una representación de bits, sería más complejo construirlo y deconstruirlo. Por ejemplo, en el ejemplo anterior, puede enviar el número 10101 == 17 para representar una ubicación (es decir, las ubicaciones 1 3 5 están "encendidas", 2 y 4 están apagadas). De nuevo, no es tan fácil ni recomendable. [También podría enviar una representación binaria, en cuyo caso enviaría enviar 1000 == 8 == 1 + 3 + 5 ---- incluso más complejo]

2

Bien chicos gracias a todos por sus respuestas. He encontrado una solución usando jQuery. He reunido todos los valores de esas casillas de verificación en el conjunto y asigno este conjunto a un campo oculto. Todas estas opciones están fuera del formulario y no se envían.

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

y la forma:

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

y fuera de la forma ocurre con todas las opciones disponibles

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

peticiones GET generará, direcciones URL largas y complicadas con que muchos opciones con el comportamiento predeterminado.

Las solicitudes de POST pueden dejarlo con URL cortas, pero pueden tener un mal funcionamiento con el botón "Atrás" y no son compatibles con los marcadores.

Para generar URL cortas con un GET, necesitaría una secuencia de comandos intermedia que tradujera las opciones seleccionadas a algo más compacto, o tendría que observar las opciones seleccionadas mediante JavaScript y crear la URL compacta del lado del cliente.

Bitwise matemática significa asignar cada bit o grupo de bits en una sola variable a una opción dada y un conjunto predefinido de valores. Por ejemplo, un entero de 32 bits podría representar 8 atributos de 4 bits cada uno:

01010010010001001010101010101001 

O:

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

Así que un número entero podría representar ocho atributos, con 16 valores posibles por grupo de 4 bits. Obviamente, eso requiere una elaboración, pero estoy seguro de que alguien de SO ya hizo esa pregunta y no estoy dispuesto a escribir más en este momento. :)

Cuestiones relacionadas