2011-01-07 16 views
6

¿Cómo puedo obtener los nombres o id's de las múltiples casillas de verificación seleccionadas en el envío, usando PHP? Lo siguiente es forma de ejemplo. Gracias.obteniendo múltiples casillas de verificación nombres/id's con php

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    <input type="checkbox" name="orange" id="orange"> 
    <input type="checkbox" name="apple" id="apple"> 
    <input type="checkbox" name="sky" id="sky"> 
    <input type="checkbox" name="sea" id="sea"> 
    <br> 
    <br> 
    <input type="submit" name="Submit" value="Submit"> 
</form> 

Respuesta

18

valores Casilla se presentan de una forma sólo si se selecciona la casilla de verificación. Además, es el atributo de nombre que cuenta, no el ID.

Hay varias maneras de manejar casillas de verificación en PHP:

  1. dará todas casillas de verificación del mismo nombre seguido por un par de soportes cuadrados, por lo que todo el conjunto se trata como una matriz. En este caso, otorgue a cada casilla de verificación un valor.
  2. Otorgue a cada casilla de verificación un nombre y un valor diferentes.
  3. Otorgue a cada casilla de verificación un nombre diferente, pero ningún valor.

En cada caso, debe verificar la existencia del nombre de la casilla de verificación en la matriz $ _POST.

Por ejemplo:

<input type="checkbox" name="color[]" id="orange" value="orange"> 
<input type="checkbox" name="color[]" id="apple" value="apple"> 

Para obtener los valores de estas casillas de verificación:

if (isset($_POST['color'])) { 
    $colors = $_POST['color']; 
    // $colors is an array of selected values 
} 

Sin embargo, si cada casilla tiene un nombre diferente y un valor explícito de esta manera:

<input type="checkbox" name="orange" id="orange" value="orange"> 
<input type="checkbox" name="apple" id="apple" value="apple"> 

Aún necesita usar isset():

if (isset($_POST['orange'])) { 
    // orange has been set and its value is "orange" 
} 

Si no establece un valor, el valor predeterminado es "on", pero no estará en la matriz $ _POST a menos que se haya seleccionado, por lo que todavía necesita usar isset().

4

Usted no va a obtener los identificadores pero los nombres se darán a índices asociativos en la $_POST array (y $_REQUEST). NOTA: solo estarán disponibles en la matriz si el cliente los verificó.

if ($_POST['oragne'] == 'on')

9

necesario para la administración de las entradas del mismo nombre:

<input type="checkbox" name="selection[]" value="orange"> 
<input type="checkbox" name="selection[]" value="apple"> 
<input type="checkbox" name="selection[]" value="sky"> 
<input type="checkbox" name="selection[]" value="sea"> 

A continuación, iterar sobre el array $ _POST [ 'selección'] en PHP.

+0

Si simplemente los nombra igual, esto no funcionará. Debe configurarlos como matrices: 'name =" selection [index] "' –

+0

ha solucionado el problema. También creo que puedes omitir el índice y se indexarán automáticamente. –

+0

Sí, podría hacer eso también, sin embargo, pidió específicamente preservar el atributo "nombre". El índice podría sustituir eso. –

2

Puede configurarlas para publicar en PHP como matrices, si se construye ellas similar a continuación:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    <input type="checkbox" name="box_group_1[oragne]" id="oragne"> 
    <input type="checkbox" name="box_group_1[apple]" id="apple"> 
    <input type="checkbox" name="box_group_1[sky]" id="sky"> 
    <input type="checkbox" name="box_group_1[sea]" id="sea"> 
    <br> 
    <br> 
    <input type="submit" name="Submit" value="Submit"> 
</form> 
<?php 
print_r($_POST['box_group_1']); 
?> 
Cuestiones relacionadas