Foros del Web » Programando para Internet » PHP »

como ingresar varios checkbox en campo de una base de datos

Estas en el tema de como ingresar varios checkbox en campo de una base de datos en el foro de PHP en Foros del Web. Hola tengo varias dudas , quisiera ingresar varios checkbox en un campo de una tabla este es un ejemplo: Cita: <br> Rojo <input type="checkbox" name="color_rojo" ...
  #1 (permalink)  
Antiguo 17/04/2014, 16:46
 
Fecha de Ingreso: julio-2013
Mensajes: 309
Antigüedad: 10 años, 9 meses
Puntos: 2
como ingresar varios checkbox en campo de una base de datos

Hola tengo varias dudas , quisiera ingresar varios checkbox en un campo de una tabla

este es un ejemplo:
Cita:
<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"

$sql_i="insert into alumno(campo_color)
values('".$nombre_color"')";
$result = mysql_query($sql_i);

/
quisiera ingresarlos a un solo campo de una base de datos como haria en el insert into para unirlos todos


tambien tengo otro problema tampoco puedo poner:

$rojo = $_POST['color_rojo'];
$azul = $_POST['color_azul']; ..............

por los names de los checkbox cambian frecuente mente en caso de que crea otro color

por ejemplo :

Cita:
Rojo <input type="checkbox" name="violeta" value="violeta" />
<br>
Azul <input type="checkbox" name="amarillo" value="azul" />
<br>
Verde <input type="checkbox" name="negro value="verde" />

como haria para insertarlos en un arreglo y teniendo en cuenta que pueden cambiar los los names




saludos
  #2 (permalink)  
Antiguo 17/04/2014, 18:07
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: como ingresar varios checkbox en campo de una base de datos

Como $_POST es un array, une a cada dato que contiene con comas entre ellos utilizando la función implode. De este modo, creas un grupo de datos, el cual puede ser insertado directamente al campo de la tabla de la BD.

Es decir:

Código MySQL:
Ver original
  1. INSERT INTO tabla (campo) VALUES(1, 2, 3, 4, 5)

Mientras que la creación de ese grupo de datos la harías así:

Código PHP:
Ver original
  1. implode(', ', $_POST);

Sin embargo, como vas a interactuar con la base de datos, es recomendable que los desinfectes para evitar posibles ataques XSS y de Inyección SQL. Con las funciones mysqli_real_escape_string y strip_tags, es posible hacer esto.

Código PHP:
Ver original
  1. $limpio = array(); //Array en donde se almacenarán los datos luego de desinfectarlos
  2.  
  3. foreach ($_POST as $dato)
  4.     $limpio[] = mysqli_real_escape_string($conexion, strip_tags($dato));
  5.  
  6. $cadena = implode(',', $limpio); //Creamos el grupo de datos

Saludos

EDITO:

Se me ocurrió otra forma de desinfectar los datos sin usar el bucle foreach.

Código PHP:
Ver original
  1. $datosLimpios = array();
  2.  
  3. if (substr(PHP_VERSION, 0, 3) < 5.3){ //Si tu versión de PHP es inferior a la 5.3
  4.     function limpiar($dato){
  5.         global $conexion;
  6.         return strip_tags(mysqli_real_escape_string($conexion, $dato));
  7.     }
  8.     $datosLimpios = array_map("limpiar", $_POST);
  9. }
  10. else //Si tu versión de PHP es mayor o igual a la 5.3
  11.     $datosLimpios = array_map(function($dato) use ($conexion){
  12.         return strip_tags(mysqli_real_escape_string($conexion, $dato));
  13.     }, $_POST);
  14.  
  15. $cadena = implode(', ', $datosLimpios);

Aplico dos formas según sea la versión de PHP que tengas, pero puedes copiar directamente una de ellas si conoces la versión tienes.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 17/04/2014 a las 20:17 Razón: Mejora del algoritmo

Etiquetas: campo, checkbox, mysql, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:34.