Campos de selección múltiple en PHP

Vamos a ver un forma simple de trabajar con campos de selección múltiple; es decir, que se puede seleccionar más de un valor a la vez. Para que quede mas claro vamos a ver un ejemplo completo, supongamos que tenemos el siguiente formulario:

index.html

Lo que vemos son 3 campos tipo checkbox llamados: color_rojo, color_azul y color_verde, típicamente recuperaríamos los valores de los campos de la siguiente forma:

proceso_colores.php

Esto es bueno siempre que nuestros campos sean independientes, pero que sucede cuando queremos seleccionar multiples valores ? tendriamos que recuperar en nuestro código PHP todas las variables… y si el campo es cargado dinámicamente? o si los valores posibles son variables?… todo esto genera sin dudas trabajo extra, dado que tendríamos que retocar el código cada vez que algo cambie.
Por suerte, existe una forma sencilla de trabajar con este tipo de campos; ahora veremos que cambios debemos hacer en nuestros archivos .

index.html

Nótese que cambiamos los nombres de los checkboxes y agregamos los paréntesis rectos [], ahora todos se llaman colores[], al hacer esto el intérprete de PHP almacena todos los valores chequeados en el array colores[] lo que nos permite hacer lo siguiente:

proceso_colores.php

El código anterior recupera la variable colores (que ahora es un array y tiene cargados los valores chequeados); luego usamos la función implode para generar una cadena de texto y poder mostrarla.

Ahora que sabemos como trabajar con este tipo de campos, vamos a ver un ejemplo donde generamos una cadena para usarla en una sentencia SQL

proceso_colores.php

Lo que hacemos es recuperar la variable e iterar sobre el array para poner en cada valor las comillas correspondientes; luego, guardamos las cadenas nuevamente en un array auxiliar y finalmente usamos la función implode para agregar las comas. La cadena generada se concatena en la sentencia INSERT y listo.

Podemos ver que es una técnica muy util ya que nos permite manejar este tipo de campos variables de forma simple. Además, hace nuestro código mas reusable ya que ahora no tenemos que cambiar nada en el caso que se agreguen mas valores.

GD Star Rating
loading...
Campos de selección múltiple en PHP, 8.1 out of 10 based on 37 ratings

Related Posts

19 Comments

  1. wilson
    Julio 22, 2009 at 11:29 am

    me gustaria saber del tema, pero en reslacion a una base de dato; ejemplo:
    yo estoy programando en php y necesito traerme una lista de un personal, pero que cada persona que me traiga tenga un checkbox asociado, cosa que cuando yo seleccione (mas de uno), este me traiga el nombre de la persona que seleciones;todo esto es por que tengo que actualizar los datos de esta persona, insertandoles un dato traido de in listbox que ya lo tengo, en resumidas cuentas lo que debo hacer es seleccionar por ejemplo 2 personas y un lugar en el listbox y que todo esto se acualice en la base de datos. gracias si me puede ayudar.

  2. Juan Benitez
    Julio 23, 2009 at 2:14 am

    Hola wilson, si entiendo bien tu consulta creo que la solución que buscas es similar a lo que dice en el artículo.
    El formulario seria casi igual solo que en vez de colores tendrías personas y la forma de recuperación de los datos seria igual también; la única variante que se presenta es en la sentencia SQL donde tendriamos un UPDATE en vez del INSERT, el truco esta en armar la sentencia convenientemente iterando el array de personas y creando una cadena como esta: (“nombre_persona1”, “nombre_persona2”) para usarla en una sentencia similar a:
    UPDATE tbl_personas
    SET campo_modificado = “dato traido del listbox”
    WHERE persona IN (“nombre_persona1”, “nombre_persona2”)

    Espero haberte aclarado un poco tus dudas, sino es asi, no dudes en escribirme y con gusto puedo ayudarte un poco mas.

  3. ignacio
    Mayo 24, 2010 at 1:28 am

    hola mi pregunta capaz que es media desubicada te pido perdon por eso pero capaz puedas orientarme,estoy haciendo una pagina en la que quiero insertar un menu de seleccion similar al que se encuentran en las paginas de ventas de vehiculos de autos o motos ,,para seleccionar por ejemplo la marca ,,el modelo ,,el año y todo eso cuando le de al botn buscar me seleccione por ejemplo el vehiculo que busco ,,como podria hacerlo?perdon otra vez,y si me podes orientar te lo agradezco mucho,saludos.

  4. Vicente
    Septiembre 16, 2010 at 7:44 am

    ¡Hola! Estoy intentando recuperar un checkbox con los procedimientos que se están señalando. Sin embargo, a mi me resulta imposible. Primero porque implode ya está en desuso, supongo.
    En segundo lugar, los problemas derivan de si se deja o no vacío el checkbox. Si tiene alguna casilla activada, no hay problemas, pero en caso de que el checkbox no sea obligatorio y no tenga seleccionado una casilla PHP da un warning.
    ¿Cómo solucionar ésto?
    Un saludo.

  5. Juan Benitez
    Septiembre 17, 2010 at 7:54 pm

    Hola Vicente, bueno primero que nada la función implode no está en desuso, la documentación oficial no hace ninguna referencia con respecto a lo que tu mencionas (http://www.php.net/implode).

    Por otro lado, si tu checkbox no es obligatorio vas a tener que tomar las precauciones debidas, en el ejemplo no fue tomado en cuenta ese caso ya que no era el objetivo del articulo, pero deberias tener algo como esto:

    if (isset($_POST[‘colores’])){

    $colores = $_POST[‘colores’];
    //El resto del codigo va aqui….

    }

    Con esto evitas procesar la variable $colores si no fue seleccionada al menos una opción.
    Bueno espero que esto te ayude con tu problema.
    saludos

  6. miriam
    Octubre 27, 2010 at 5:32 pm

    Hola, buenas tardes, estoy realizando un formulario, que tiene una funcionalidad muy similar a la que explicas en el articulo pero tengo un par de inconvenientes, lo que estoy haciendo es que construyo checkbok, dependiendo a los valores que tenga en la base de datos,
    “.$rowmp[“descripcion”].”-“.$rowmp[“idcatmateriaprima”].”, adicionalmente construyo un input text, pero tengo problemas en que el momento en cual seleccionen los productos mostrados en los checks correnpondan a los valores que esta colocando en el input. espero que me puedas ayudar.

  7. AUGUSTO CANDO
    Septiembre 12, 2011 at 9:01 pm

    muy buen tutorial

    excelente

  8. Alejandro
    Octubre 12, 2011 at 1:01 am

    Hola, mi caso es el siguiente, tengo un checkbox que se llena de una base de datos:
    1 recupero en un array el campo deseado de mi base de datos
    2 con el uso de explode separo el texto de este array
    3 luego introduzco cada elemento del array en un checkbox
    4 por medio de tu codigo

    lo recupero pero despues lo intento meter a una tabla diferente y en lugar de poner el valor del array me pone el nombre mismo del array, alguna sugerencia?
    gracias de antemano

  9. Esperanza
    Noviembre 10, 2011 at 12:32 pm

    hola
    por favor necesito hacer una evaluación dentro de un sitio web que se hizo con actiweb , pero tengo que hacer actividades y quiero hacer una test de selección múltiple con una única respuesta por favor ayudame con el código para subirlo a la pagina
    muchas gracias por tu valioso tiempo
    Esperanza

  10. eliza
    Noviembre 19, 2011 at 12:36 am

    estoy teniendo un problema con por falta de información
    mi problema es q no se como hago para hacer un cuestionario que tenga respuestas estilo idfes y que me valide las respuestas con una nota si son correctas o no porfis espero pronto una respuesta
    muchas gracias 🙂

  11. eliza
    Noviembre 19, 2011 at 12:37 am

    perdon se me olvido poner que es en codigo php o si hay otra manera se los agradesco

  12. admin
    Noviembre 22, 2011 at 12:00 am

    hola Esperanza, la verdad no conozco el sistema de actiweb, lamento no poder ayudarte con eso; pero si solo queres es una respuesta unica podes cambiar los checkbox por radiobuttons y con eso solo pueden seleccionar 1 opcion.

  13. admin
    Noviembre 22, 2011 at 12:28 am

    Eliza,
    no entiendo bien la primera parte de tu pregunta,”respuestas estilo que ??” por otro lado, la validacion de las respuestas puedes implementarlas con javascript o php, depende del tipo de cuestionario que quieras hacer y el uso que le vayas a dar. Para ayudarte mejor preciso que me des un ejemplo de que tipo de cuestionario quieres hacer.
    saludos

  14. Viky
    Noviembre 23, 2012 at 5:16 pm

    Hola buenas tardes, mi preguntas es la siguiente, como podria hacer una select anidado en php, que me filtre segun los select selecionados. Gracias por su ayuda

  15. Juan
    Noviembre 23, 2012 at 6:29 pm

    Hola Viky, tu problema es bastante comun y esta bien documentado por toda la internet, te dejo este link done explican bien lo que quieres. http://deesosetrata.wordpress.com/2012/07/10/select-anidados-php-ajax-y-jquery/

    saludos.

  16. Pato
    Diciembre 17, 2012 at 7:27 pm

    Hola, esta muy bueno el ejemplo, pero podrias ayudarme con esto?
    te explico:

    al seleccionar multiples valores necesito que me de una unica respuesta, es decir, si le digo o selecciono, mi pelo es negro, mi piel es morena, mi estatura mediana, me responda con una unica respuesta como: tus rasgos sn sudamericanos…por ejemplo.
    O, mis curvas son alzadas, mis caderas son pequeñas, responda, tienes contextura media.

    Por favor, ayudame con esto. muchas gracias!

  17. juan
    Enero 17, 2014 at 5:29 am

    Hola.
    buen tutorial pero me surgio una cuestion,
    por ejemplo,si deseo hacer una busqueda poniendo un campo para que ingrese el color a buscar, como hacer el query para que me traega los datos que se concatenaron?

  18. Luis Angel
    Junio 2, 2016 at 1:12 pm

    hola ….. mira tengo un problemita trato de mandar varios valorer(valga la redundancia) pero al mommento de enviarlos a otra pagina solo me manda un valor te pongo mi codigo

    ______________________________________

    No Articulo:

    Seleccione el # Articulo

    <?php
    $SQL="SELECT \"idArticulo\",descripcion FROM articulos order by \"idArticulo\" ";

    $resultado=EjecutarSQL($SQL,1);

    foreach($resultado as $array)
    {
    echo '’.$array[‘idArticulo’].’ – ‘.$array[‘descripcion’].”;
    }

    ?>

    ________________________________________________________

    $(document).ready(function() {

    $(‘#cmdAgregar’).click(function(event) {
    $(“#preloader1”).css(“display”, “inline”);
    $.post(“altaactualizafacart.php”,
    {
    // var foo = $(‘#nofactura :selected’).map(function(){return $(this).val();}).get(),
    nofactura:$(“#nofactura option:selected”).val(),
    noarticulo:$(“#noarticulo option:selected”).val()
    },
    function(respuesta){
    $(“#preloader”).css(“display”, “none”);
    $(“#contenido”).html(respuesta);
    });
    });
    });

    mi variable que manda varios valores es noarticulo pero solo manda uno no se si puedas ayudarme en este caso

  19. Diana
    Junio 28, 2016 at 10:59 pm

    Hola!muy buen tu explicacion y aporte! pero implemente tu codigo pero me salio un error
    Parse error: syntax error, unexpected ‘)’, expecting T_PAAMAYIM_NEKUDOTAYIM 🙁

Leave A Comment

Security Code:

Leer más
Infografía – La guerra continua, Iphone 6 vs Galaxy S6

Días atrás Samsung anunció el nuevo Galaxy S6 y el Galaxy S6 Edge durante del Congreso Mundial de Móviles en...

Cerrar