Controlar array de checkboxes con PHP

En este artículo vamos a ver como controlar un grupo de checkboxes guardados en un array con PHP.

El componente checkbox permite seleccionar una opción al usuario del programa o página Web con el objetivo de tomar una decisión directamente en pantalla. Esta situación se puede dar en muchos circumstancias.

En el ejemplo que vamos a ilustrar vamos a tener un listado de paises agrupados por continentes dando la opción al usuario de elegir los paises que desee.

paises

La idea no es más que un formulario con inputs checkboxes y un botón submit. La lista de checkboxes la pondremos de la siguiente forma:

<input type="checkbox" value="España" name="countries[]" /><label>España</label><br/>
<input type="checkbox" value="Portugal" name="countries[]" /><label>Portugal</label><br/>
<input type="checkbox" value="Francia" name="countries[]" /><label>Francia</label><br/>
...

Sobretodo te tienes que fijar en el atributo «name» de los inputs que no es más que un array y también es importante su valor.

Y el botón:

<input type="submit" name="enviar" value="enviar" />

Ahora, viene la clave del asunto. Nos interesa controlar que paises ha checkeado el usuario. ¿Cómo controlaremos estos datos?

<?php
if (isset($_POST['enviar'])) {
    if (is_array($_POST['countries'])) {
        $selected = '';
        $num_countries = count($_POST['countries']);
        $current = 0;
        foreach ($_POST['countries'] as $key => $value) {
            if ($current != $num_countries-1)
                $selected .= $value.', ';
            else
                $selected .= $value.'.';
            $current++;
        }
    }
    else {
        $selected = 'Debes seleccionar un país';
    }

    echo '<div>Has seleccionado: '.$selected.'</div>';
}    
?>

El código de control anterior lo puedes situar por debajo de la etiqueta <body> y lo que estamos indicando es que si se ha pulsado el botón de enviar. Comprobamos si es un array la variable «countries» enviada por POST, y si lo es recorremos el array obteniendo su valor finalmente imprimiéndolo por pantalla.

paises2

Ver ejemplo en funcionamiento

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(20 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

38 respuestas a “Controlar array de checkboxes con PHP”

  1. Jaksavit dice:

    Muchas gracias José Aguilar, fue de mucha ayuda tu post

  2. Mari dice:

    Hola espero estes bien.

    Esto realizando una consulta que me muestra la información a traves de checkboxes dinámico de diferentes tablas de acuerdo a una condición que se cumpla. Ali el usuario podrá mirar y seleccionar los registros que desea guardar y asignarle el correlativo por grupo de proveedor a varias facturas.
    Esta es mi consulta:
    sqlsrv_query($conn,$sql=»SELECT
    Impuesto_Comprobante.RCRTCD AS Impuesto_Comprobante_RCRTCD,
    Temporal_Impuesto.APCMPY AS Temporal_Impuesto_APCMPY,
    Temporal_Impuesto.APVNDR AS Temporal_Impuesto_APVNDR,
    Temporal_Impuesto.APINV AS Temporal_Impuesto_APINV,
    Temporal_Impuesto.APIRRF AS Temporal_Impuesto_APIRRF,
    Temporal_Impuesto.VENDOR AS Temporal_Impuesto_VENDOR,
    Temporal_Impuesto.TXCOMP AS Temporal_Impuesto_TXCOMP,
    Temporal_Impuesto.TXVNDR AS Temporal_Impuesto_TXVNDR,
    Temporal_Impuesto.TXTRCD AS Temporal_Impuesto_TXTRCD,
    Temporal_Impuesto.TXRATE AS Temporal_Impuesto_TXRATE,
    Temporal_Impuesto.TXINV AS Temporal_Impuesto_TXINV,
    Temporal_Impuesto.TXTYPE AS Temporal_Impuesto_TXTYPE,
    Temporal_Impuesto.TXTXBA AS Temporal_Impuesto_TXTXBA,
    Temporal_Impuesto.TXTXTC AS Temporal_Impuesto_TXTXTC,
    Temporal_Impuesto.TXTAXT AS Temporal_Impuesto_TXTAXT,
    Temporal_Impuesto.TXIDTE AS Temporal_Impuesto_TXIDTE,
    Temporal_Impuesto.AINVDT AS Temporal_Impuesto_AINVDT,
    Temporal_Impuesto.VNDNAM AS Temporal_Impuesto_VNDNAM,
    Impuesto_Comprobante.Tipo_Comprobante AS Impuesto_Comprobante_Tipo_Comprobante
    FROM
    dbo.Temporal_Impuesto Temporal_Impuesto INNER JOIN dbo.Impuesto_Comprobante Impuesto_Comprobante ON Temporal_Impuesto.TXTRCD = Impuesto_Comprobante.RCRTCD
    WHERE Impuesto_Comprobante.ID_Tipo_Comprobante =’1′ ORDER BY Temporal_Impuesto_TXVNDR»);

    $stmt = sqlsrv_query( $conn, $sql );
    if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
    }
    Aqui despliego la tabla con la informacion
    while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ){
    echo «».$row[‘Temporal_Impuesto_AINVDT’].
    «».$row[‘Temporal_Impuesto_VNDNAM’].
    «».$row[‘Temporal_Impuesto_APINV’].
    «».$row[‘Temporal_Impuesto_APIRRF’].
    «».round($total=$row[‘Temporal_Impuesto_TXTXBA’]+$row[‘Temporal_Impuesto_TXTAXT’],2).
    «».round($row[‘Temporal_Impuesto_TXTXBA’],2).
    «».round($row[‘Temporal_Impuesto_TXRATE’],2).
    «».round($row[‘Temporal_Impuesto_TXTXTC’],2).
    ««.»»;
    }
    Lo que no logro es poder pasar los datos seleccionados y asignarles el correlativo que corresponde y registrar.

    Intente ejecutarlo con el siguiente código pero solo me devuelve un campo:

    include»Conexion_Impuestos.php»;
    if (isset($_POST[‘Enviar’])) {
    if (is_array($_POST[‘opcion’])) {
    $selected = »;

    $num_opciones = count($_POST[‘opcion’]);
    // echo $num_opciones;
    $current = 0;
    foreach ($_POST[‘opcion’] as $key => $value) {
    if ($current != $num_opciones-1)
    $selected .= $value.’, ‘;
    $selected .= $value.’.’;
    $current++;
    echo $selected;

    }

    $hoy = date(«yym»);
    // echo $hoy;
    sqlsrv_query($conn,$sql1=»SELECT Correlativo_Inicial from dbo.Correlativo»);
    $stmt1= sqlsrv_query( $conn, $sql1);
    if( $stmt1 === false) {
    die( print_r( sqlsrv_errors(), true) );
    }

  3. Salvador Galindo dice:

    Hola José de antemano muchas gracias por el aporte, pregunta, estoy ejecutando tu ejemplo y funciona genial, ¿Como le haría para obtener el valor seleccionado y pasar este a otro formulario por POST,? debido a devuelve el valor sobre el mismo formulario, pero si en el action del form coloco un formulario no pasa el valor, como podría realizarlo.

  4. Leonardo Torres Aguilar dice:

    Buen día José, me ha sido de mucha ayuda tu ejemplo, ¿ tendrás algún otro en donde automáticamente te vaya pintando el país seleccionado sin necesidad de darle click al botón «enviar», o similar que haga esta función ?.
    Gracias

    • Jose Aguilar dice:

      Hola,

      Para eso necesitarás controlar el evento click de cada checkbox con el objetivo de leer su valor e imprimirlo en pantalla. Esto lo puedes hacer con JavaScript.

      Saludos

  5. rcas dice:

    disuculpa como podría implementar el value=»» si los valores los estoy obteniendo de un array?
    ya vi lo que contestaste a adrian es mas o menos mi caso.
    pero entonces como lo implemento?

    • Jose Aguilar dice:

      Hola,

      Si los valores o países vienen de la base de datos en un array, deberás recorrer este array con un foreach, por ejemplo, y dentro del mismo colocar todos los inputs tipo checkbox con su valor correspondiente.

      Saludos

  6. Daniel Díaz dice:

    Hola
    Muy bueno, casi es lo que estaba buscando excepto porque cambie los países por salarios y al final debo sumar los seleccionados pero a pesar de mis esfuerzos sigue mostrando la lista de salarios. Alguna idea que puedas darme para solucionarlo

    Gracias 🙂

  7. Juan Guerra dice:

    Hola tengo un listado con chekbox, mi problema es que cuando paso por metodo POST los checbox seleccionados solo me pasa el valor de 200 y mi listado suele variar pueden ser 100 o pueden ser 900 y del 200 en adelante es como si no existieran.

  8. francisco gutierrez dice:

    Hola buen dia
    esta muy bien tu ejemplo me ayudo un poco con lo que quiero lograr hacer solo que aun no me queda claro como poder terminar mi caso,

    yo tengo los checkbox a un lado de la informacion que tengo en mi base de datos y la quiero mandar a otra parte como un lista para imprimirla

    como puedo hacer eso ??

  9. Ivan dice:

    Hola que tal, muy bueno tu ejemplo, solo una pregunta cuando lo mando a imprimir en un PDF con la función FPDF no logro hacer que me de los saltos de linea de acuerdo al país seleccionado espero y me puedas ayudar

  10. RAUL RODRIGUEZ dice:

    yo envio varios checkbox name=»countries[]» guardo en un campo como brasil,bolivia,peru,colombia ahora quiero con jquery recuperar de la tabla el campo guardado y con ese datos chekear los paises en un formulario

    Es decir hacer un check en un formulario de todos los paises en el campo

    Cual seria el codigoo te agradezco la colaboracion

  11. Peter dice:

    Hola josé, Disculpa como podría hacer esto para que me pueda desplegar las opciones que tiene cada selección así como se hace en los combos dependientes
    De ante mano muchas gracias por el aporte

  12. Adrian dice:

    ¿y si el listado vieniera de una base de datos?

    ¿como podemos definir la variable en el POST si todavia no sabemos lo que listara el resultado de la base de datos?

  13. Diana dice:

    Hola! muy buen aporte muchas gracias :3

  14. nelson stuardo dice:

    gracias funciono!!

  15. Jhossep Vargas dice:

    Gracias, es lo que estaba buscando (Y)

  16. JoPin dice:

    Excelente, me funciona de maravilla

  17. andres berrio dice:

    Hola, Gracias por compartir tus conocimientos, tengo una pregunta, un ejemplo si tengo dos checkbox y cada uno van a diferente campo es decir
    Los países de EUROPA yo selecciono van a un campo de la tabla y los países de AMÉRICA se registran en otro campo de la misma tabla, como hago la inserción de estos, Espero me puedas contestar y dar un ejemplo. Te agradecería mucho…

    • Jose Aguilar dice:

      Hola, Creo que tendrás que identificar los grupos por continentes por ejemplo. Tendrás que identificar los checkboxes por continentes definiendo su name y en el value el valor del país.

      Por ejemplo:

      …input type=»checkbox» name=»europa[]» value=»españa» …

      …input type=»checkbox» name=»america[]» value=»brasil» …

      Espero haberte ayudado,
      saludos

  18. Ximena Resendiz dice:

    yo tengo un problema, me gustaria saber si me puedes orientar en el tema, guiandome en tu ejemplo, el usuario dio clik en españa, eu, china y nigeria. supongamos que el mismo usuario vuelve a entrar, cual seria el codigo para que aperescan seleccionadas esas opciones, dando paso a que seleccione la que desee de las restantes. agradeceria mucho si me pudieras ayudar.

    • Jose Aguilar dice:

      Hola,

      Te puedo comentar una idea que yo plantearía. En el mismo formulario tiene que recibir en un array los paises seleccionados y hacer una comprobación en los inputs para checkearlos en el caso de que estén en el array comentado.

      Espero haberte dado una idea,
      saludos

      Saludos

  19. salvador dice:

    el ejemplo que tienes esta muy claro los checkbox ya los has definido y solo los controlas con el array, pero lo que te e comentado en la pregunta anterior es de poder controlar una serie de checkbox de manera dinamica.

  20. salvador dice:

    Ola amigo oye esta interesante el articulo, pero mi duda es de que e tenido un problema al resolver un conjunto de checkbox pero mandados a traer desde mysql, implementar un ciclo while por que ahi se tienen que almacenar e imprimirlos en checkbox, cuando son demaciados se generan automaticamente dependiendo los datos de la base de datos asi que mi duda es como poder controlar los checkbox de esa forma.

  21. moises dice:

    gracias, me ayudo mucho en lo que estoy trabajando ya que no encontraba la solucion, gracias

  22. Ruben dice:

    Gracias me ha servido de mucho, tenia como media hora buscando como hacer esto. Y que fácil lo explicas

  23. […] un artículo anterior ya vimos como controlar un grupo de checkboxes guardados en un array con PHP. En este artículo vamos recoger los valores de un grupo de checkboxes con […]

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.