2011-10-04 27 views
15

Im tratando de crear un formulario usando PHP y no puedo encontrar un tutorial sobre lo que necesito, así que pensé en preguntar aquí.Obtener datos POST de múltiples casillas de verificación?

tengo una opción de casilla múltiple en mi página ...

<li> 
    <label>What service are you enquiring about?</label> 
    <input type="checkbox" value="Static guarding" name="service">Static guarding<br> 
    <input type="checkbox" value="Mobile Patrols" name="service">Mobile Patrols<br> 
    <input type="checkbox" value="Alarm response escorting" name="service">Alarm response escorting<br> 
    <input type="checkbox" value="Alarm response/ Keyholding" name="service">Alarm response/ Keyholding<br> 
    <input type="checkbox" value="Other" name="service">Other<input type="hidden" value="Other" name="service"></span> 
    </li> 

No estoy seguro sin embargo cómo recoger todas casilla valores utilizando el método POST?

si uso

$service = $_POST['service']; 

solo me dan 'otro' devuelto

Respuesta

43

Nombre los campos como service[] en lugar de service, entonces usted será capaz de acceder a él como matriz. Después de eso, se puede aplicar funciones regulares a las matrices:

  • Comprobar si se ha seleccionado un cierto valor:

    if (in_array("Other", $_POST['service'])) { /* Other was selected */} 
    
  • Obtener una sola cadena de nueva línea separada con todas las opciones seleccionadas:

    echo implode("\n", $_POST['service']); 
    
  • Desplácese por todas las casillas de verificación seleccionadas:

    foreach ($_POST['service'] as $service) { 
        echo "You selected: $service <br>"; 
    } 
    
-1
<input type="checkbox" value="Other" name="service">Other<input type="hidden" value="Other" name="service"></span> 

usted tiene un campo de entrada oculto con el mismo nombre que la casilla de verificación. los campos "posteriores" con el mismo nombre que el anterior sobrescribirán los valores del campo anterior. Esto significa que su formulario, tal como se publicó anteriormente, SIEMPRE enviará service=Other.

Dada la redacción de su pregunta en el html, parece más bien que desea un botón de opción, que permite seleccionar UN solo de un grupo de campos del mismo nombre. Las casillas de verificación son una situación "Y", los botones de radio corresponden a "O"

3

Actualmente está capturando su última entrada oculta. ¿Por qué tienes esa entrada escondida allí? Si desea obtener información si la casilla "Otros" está marcada, entonces usted tiene que ocultar el

<input type="text" name="other" style="diplay:none;"/> 

y usted puede mostrarlo con javascript cuando el cuadro de "Otros" está marcada. Algo como eso.

Sólo realizamos el servicio de nombre de atributo []

<li> 
<label>What service are you enquiring about?</label> 
<input type="checkbox" value="Static guarding" name="service[]">Static guarding<br> 
<input type="checkbox" value="Mobile Patrols" name="service[]">Mobile Patrols<br> 
<input type="checkbox" value="Alarm response escorting" name="service[]">Alarm response escorting<br> 
<input type="checkbox" value="Alarm response/ Keyholding" name="service[]">Alarm response/ Keyholding<br> 
<input type="checkbox" value="Other" name="service[]">Other</span> 
</li> 

Luego, en su PHP se puede acceder a ella al igual que

$service = $_POST['service']; 
echo $service[0]; // Output will be the value of the first selected checkbox 
echo $service[1]; // Output will be the value of the second selected checkbox 
print_r($service); //Output will be an array of values of the selected checkboxes 

etc ...

Cuestiones relacionadas