Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/11/2012, 13:21
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 8 meses
Puntos: 65
Problema enviando checkbox a la base de datos.

Hola.

Estoy haciendo pruebas con un formulario con varios checkbox los cuales quiero enviar a la base de datos si se marcan.

Primero he creado un formulario con un array y desde un for cargo los input check por si en otro ejercicio se repiten muchos registros:

Código PHP:
Ver original
  1. <h3>Preparar formulario con checkbox y envio a la base de datos</h3>
  2.     <form name="enfermedades-b" method="post" action="">
  3.         Nombre: <input type="text" name="nombre" /><br />
  4.         Curso: <input type="text" name="curso" /><br />
  5.         Enfermedades:
  6.         <?php      
  7.         // Ahora intento hacer un formulario con los valores de enfermedades para no repetir
  8.         //Creo la variable y el array enfermedades         
  9.         $enfermedades=array("Asma", "Epilepsia", "Esquizofrenia");
  10.         $cantidad = count($enfermedades);//Con esto calculo la cantidad de enfermedades
  11.         /*Creo el bucle for para que recorra desde 0 hasta el total de enfermedades existentes y que las
  12.         muestre de una en una dentro de los inputs del formulario.*/   
  13.         for ($i=0;$i<$cantidad; $i++)
  14.         {          
  15.             echo '<input type="checkbox" name="check'.$i.'" value="'.$enfermedades[$i].'" />'.$enfermedades[$i].'';
  16.         }
  17.         //Creo un campo oculto para recoger el valor de la cantidad
  18.         echo '<input type="hidden" value="'.$cantidad.'" name="cantidad-enfermedades" /><br />';
  19.         ?>     
  20.         <input type="submit" value="Enviar" name="enviart" />
  21.     </form>

Y luego preparo el envio a la base de datos:

Código PHP:
Ver original
  1. <?php
  2.     if(isset($_POST["enviart"])){
  3.         //Creo la conexión al servidor con usuario y contraseña:
  4.         $conexion=mysql_connect("localhost","root","vertrigo");
  5.         if(!$conexion)
  6.         {
  7.             //Si hay algún error en la conexión lo muestra
  8.             exit("Database Error: " .mysql_error());
  9.         }      
  10.         /*Selecciono la base de datos y le doy la variable para conectar al servidor, asi todas las consultas que se hagan ya
  11.         estarían conectadas.*/
  12.         mysql_select_db("alumnos_a",$conexion);
  13.         //Preparo la consulta
  14.         $insertar=mysql_query("insert into alumnos(nombre,curso) values
  15.         ('$_POST[nombre]','$_POST[curso]')");
  16.         /*Creo otro ciclo para buscar los que están marcados en el checkbox contando en el campo name oculto los checks marcados
  17.         con el nombre check*/
  18.         //Empezando de 1, mientras que sea menor o igual que la cantidad-enfermedades (3) que sume 1
  19.         for($che=1;$che<=$_POST["cantidad-enfermedades"];$che++)
  20.         {
  21.             //Si existe el check (nº tal) marcado entonces idicará check (nº tal)
  22.             if(isset($_POST[ "check".$che]))
  23.             {
  24.                 /*Llamo a enfermedades con su índice correspondiente $enfermedades[$che] y asi incluye todas
  25.                 las enfermedades marcadas y la envía a la base de datos.*/             
  26.                 $insertar .= mysql_query("insert into alumnos(enfermedades) values ('$enfermedades[$che]')");
  27.             }
  28.         }
  29.         //Cierro la conexión
  30.         mysql_close($conexion);
  31.     }  
  32. ?>

Cuando le doy a enviar me recoge bien nombre y curso pero luego la parte de los checks me los rellena en otra nueva fila y a la vez no me los envía todos de una vez a la misma casilla.

¿Como podría arreglarlo? Saludos.