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
1 2 3 4 5 6 7 8 9 10 11 | <form name="prueba" action="proceso_colores.php" method="POST"> Cuales son tus colores preferidos? <br> Rojo <input type="checkbox" name="color_rojo" value="rojo" /> <br> Azul <input type="checkbox" name="color_azul" value="azul" /> <br> Verde <input type="checkbox" name="color_verde" value="verde" /> <br> <input type="submit" value="Enviar" name="btn_colores" /> </form> |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php //recupero mediante POST $rojo = $_POST['color_rojo']; $azul = $_POST['color_azul']; $verde = $_POST['color_verde']; echo $rojo . '<br>'; echo $azul . '<br>'; echo $verde . '<br>'; //despues trabajamos con las variables normalmente... ?> |
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
1 2 3 4 5 6 7 8 9 10 11 | <form name="prueba" action="proceso_colores.php" method="POST"> Cuales son tus colores preferidos? <br> Rojo <input type="checkbox" name="colores[]" value="rojo" /> <br> Azul <input type="checkbox" name="colores[]" value="azul" /> <br> Verde <input type="checkbox" name="colores[]" value="verde" /> <br> <input type="submit" value="Enviar" name="btn_colores" /> </form> |
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
1 2 3 4 5 6 | <?php $colores = $_POST['colores']; $texto_colores = implode(', ', $colores); echo ' Tus colores son favoritos son: ' . $texto_colores; ?> |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $colores = $_POST['colores']; foreach($colores as $color){ $valor = "'".$color."'"; $colores_aux[] = $valor; } $valores = implode(', ', $colores_aux); $sql_valores = "(" .$valores. ")"; $sql_insert = "INSERT INTO TBL_COLORES (color) VALUES " . $sql_valores. ";"; echo $sql_insert; ?> |
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.
Campos de selección múltiple en PHP,





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.
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.
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.
¡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.
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
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.
muy buen tutorial
excelente
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
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
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
perdon se me olvido poner que es en codigo php o si hay otra manera se los agradesco
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.
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
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
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.
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!