Foros del Web » Programando para Internet » PHP »

Problema enviando checkbox a la base de datos.

Estas en el tema de Problema enviando checkbox a la base de datos. en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 26/11/2012, 13:21
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 9 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.
  #2 (permalink)  
Antiguo 26/11/2012, 13:43
Avatar de homlyne  
Fecha de Ingreso: noviembre-2012
Ubicación: Madrid
Mensajes: 59
Antigüedad: 12 años
Puntos: 10
Respuesta: Problema enviando checkbox a la base de datos.

Perdona no he podido entenderte. se insertan nuevas filas ¿y no quieres que se repitan? y ¿quieres que todos los checkbox se garden en la mis fila?
__________________
_________________________

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

Hola homlyne la idea es insertar de una vez nombre, curso y enfermedades, solo que no logro meter a todas las enfermedades marcadas por el checkbox todo a la vez.

No se si ahora me habré explicado mejor.

Gracias un saludo.
  #4 (permalink)  
Antiguo 26/11/2012, 14:09
Avatar de homlyne  
Fecha de Ingreso: noviembre-2012
Ubicación: Madrid
Mensajes: 59
Antigüedad: 12 años
Puntos: 10
Respuesta: Problema enviando checkbox a la base de datos.

Todas las enfermedades en un solo campo de la tabla, o te refieres a insertar todos los campos en una sola consulta?

Si te sale algun error al hacer la consulta lo puedes postear..
__________________
_________________________

Homlyne - Soporte Online
  #5 (permalink)  
Antiguo 26/11/2012, 14:17
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 9 meses
Puntos: 65
Respuesta: Problema enviando checkbox a la base de datos.

Exacto, insertar todos los campos en una sola consulta.

Error no me da, si hago el envio con todo relleno y dos enfermedades por ejemplo pues me inserta en una fila nombre y curso y deja vacía la enfermedad y luego en la fila de abajo deja vacio nombre y curso y marca por ejemplo una enfermedad, luego en la otra fila todos vacios menos otra enfermedad marcada.

En un solo envío me sale algo asi:

id_alumno | nombre | curso | enfermedades
-----------------------------------------------------------
1 |José | Matemáticas |(vacio)
2 | (vacio) | (vacio) | Asma
3 | (vacio) | (vacio) | Epilepsia

Es decir en vez de crearme un solo registro me crea 3 y no lo recoge todo de una vez en la misma casilla.

Saludos.
  #6 (permalink)  
Antiguo 26/11/2012, 14:35
Avatar de homlyne  
Fecha de Ingreso: noviembre-2012
Ubicación: Madrid
Mensajes: 59
Antigüedad: 12 años
Puntos: 10
Respuesta: Problema enviando checkbox a la base de datos.

ok, entiendo. fijate que realizas un insert y a continuación realizas 3 insert provocado por el bucle, entonces es lógico que salgan campos vacíos, y lo que quieres es un solo registro con la casilla seleccionada? ¿verdad?, perdona por tantas preguntas pero tengo que entender lo que necesitas para ayudarte con alguna solucion.
__________________
_________________________

Homlyne - Soporte Online
  #7 (permalink)  
Antiguo 26/11/2012, 14:44
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Problema enviando checkbox a la base de datos.

Lo mejor siempre es usar arrays en los nombres de los checkbox, es decir algo así
Código HTML:
Ver original
  1. <input type="checkbox" name="foo[]" value="1" />
  2. <input type="checkbox" name="foo[]" value="2" />
  3. <input type="checkbox" name="foo[]" value="3" />
  4. <input type="checkbox" name="foo[]" value="4" />
  5. <input type="checkbox" name="foo[]" value="5" />
  6. <input type="checkbox" name="foo[]" value="6" />
Y para leerlos solo es cuestión de hacer algo así
Código PHP:
Ver original
  1. foreach($_POST['foo'] as $v){
  2.     echo $v . '<br />';
  3. }
Así que puedes hacer lo que quieras, con ellos, ejemplo:
Código PHP:
Ver original
  1. echo $_POST['name'] . ' - ' . $_POST['otro'] . ' - ' . implode(';', $_POST['foo']);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 26/11/2012, 14:47
Avatar de homlyne  
Fecha de Ingreso: noviembre-2012
Ubicación: Madrid
Mensajes: 59
Antigüedad: 12 años
Puntos: 10
Respuesta: Problema enviando checkbox a la base de datos.

Bueno, Solo quieres un registro:

1 |José | Matemáticas |Asma //es mejor que utilices radio button

Ahora si quieres registrar las casillas activadas con el mismo nombre y curso:

id_alumno | nombre | curso | enfermedades
-----------------------------------------------------------
1 |José | Matemáticas |(vacio)
2 | José | Matemáticas | Asma
3 | José | Matemáticas | Epilepsia

insertas todos los campos dentro del bucle

Ahora si quieres registrar el total de casillas activas, osea si activas 2 de 3 casillas y solo registrar esas dos casillas activadas, puedes recorrer los campos de post

foreach($_POST as $enfermedades => $valor){
// la sentencia insert
}
__________________
_________________________

Homlyne - Soporte Online

Última edición por homlyne; 26/11/2012 a las 15:08
  #9 (permalink)  
Antiguo 27/11/2012, 06:38
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 9 meses
Puntos: 65
Mensaje Respuesta: Problema enviando checkbox a la base de datos.

Hola de nuevo.

He pasado a crearlos con el foreach explicado por abimaelrc para crear el formulario:

Código PHP:
Ver original
  1. <form name="enfermedades" method="post" action="">
  2.         Nombre: <input type="text" name="nombre" /><br />
  3.         Curso: <input type="text" name="curso" /><br />    
  4.         <!--<input type="checkbox" name="foo[]" value="1" />
  5.         <input type="checkbox" name="foo[]" value="2" />
  6.         <input type="checkbox" name="foo[]" value="3" />
  7.         <input type="checkbox" name="foo[]" value="4" />
  8.         <input type="checkbox" name="foo[]" value="5" />
  9.         <input type="checkbox" name="foo[]" value="6" />-->
  10.         <?php
  11.         $enfermedades=array("Asma", "Epilepsia", "Esquizofrenia");
  12.         $cantidad=count($enfermedades);
  13.         for ($c=0; $c<$cantidad ; $c++) {
  14.             //Preparo tantos inputs como enfermedades tenga el array
  15.             echo '<input type="checkbox" name="foo[]" value="'.$enfermedades[$c].'" />'.$enfermedades[$c].'';
  16.         }      
  17.         ?>
  18.         <input type="submit" value="Enviar" name="enviar-ch" />
  19.     </form>

Luego he hecho pruebas para ver los marcados e imprimir todos los campos sale perfectamente:

Código PHP:
Ver original
  1. foreach($_POST['foo'] as $v)
  2.         {
  3.             echo $v . '<br />';                
  4.         }
  5. echo $_POST['nombre'] . ' - ' . $_POST['curso'] . ' - ' . implode('; ', $_POST['foo']);

Sin embargo cuando intento eviarlos a la base de datos me sigue dando error o me falla ya que no termino de ubicar ese implode:

Código PHP:
Ver original
  1. <?php
  2.     if(isset($_POST["enviar-ch"]))
  3.     {
  4.         //Creo la conexión al servidor con usuario y contraseña:
  5.         $conexion=mysql_connect("localhost","root","vertrigo");
  6.         if(!$conexion)
  7.         {
  8.             //Si hay algún error en la conexión lo muestra
  9.             exit("Database Error: " .mysql_error());
  10.         }      
  11.         /*Selecciono la base de datos y le doy la variable para conectar al servidor, asi todas las consultas que se hagan ya
  12.         estarían conectadas.*/
  13.         mysql_select_db("alumnos_a",$conexion);    
  14.         /*Creo otro ciclo para buscar los que están marcados en el checkbox haciendo un foreach */
  15.         foreach($_POST['foo'] as $v)
  16.         {
  17.             //echo $v . '<br />';
  18.             //$insertar . = implode('; ', $_POST['foo']);      
  19.         }        
  20.         $insertar=mysql_query("insert into alumnos(nombre,curso,enfermedades) values
  21.         ('$_POST[nombre]','$_POST[curso]' , . implode(', '$_POST[foo]");                   
  22.         //Cierro la conexión
  23.         mysql_close($conexion);
  24.     }  
  25.     ?>

¿Donde debo colocarlo de forma correcta para que envíe todos los valores?. Gracias de nuevo.
  #10 (permalink)  
Antiguo 27/11/2012, 07:09
Avatar de homlyne  
Fecha de Ingreso: noviembre-2012
Ubicación: Madrid
Mensajes: 59
Antigüedad: 12 años
Puntos: 10
Respuesta: Problema enviando checkbox a la base de datos.

Debes postear el error para ver que error y en que línea esta.... pero de momento veo un error de sintaxis en está parte . implode(', '$_POST[foo]"); con las comillas:

$insertar=mysql_query("insert into alumnos(nombre,curso,enfermedades) values
('$_POST[nombre]','$_POST[curso]' , ' " . implode(', ', $_POST["foo"]) ." ' ");
__________________
_________________________

Homlyne - Soporte Online
  #11 (permalink)  
Antiguo 27/11/2012, 07:15
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 9 meses
Puntos: 65
Respuesta: Problema enviando checkbox a la base de datos.

Hola de nuevo.

He cambiado a tu ejemplo pero me sigue dando error:

Código PHP:
Ver original
  1. $insertar=mysql_query("insert into alumnos(nombre,curso,enfermedades) values
  2.        ('$_POST[nombre]','$_POST[curso]' , ' " . implode(', '$_POST[foo]) ." ' ");

Cita:
Parse error: syntax error, unexpected T_VARIABLE in C:\VertrigoServ\www\email-formularios\ejemplo-checkbox.php on line 211
El formulario es más largo pero el error lo indica en esa misma linea.
  #12 (permalink)  
Antiguo 27/11/2012, 07:19
Avatar de homlyne  
Fecha de Ingreso: noviembre-2012
Ubicación: Madrid
Mensajes: 59
Antigüedad: 12 años
Puntos: 10
Respuesta: Problema enviando checkbox a la base de datos.

Cita:
Iniciado por kahlito Ver Mensaje
Hola de nuevo.

He cambiado a tu ejemplo pero me sigue dando error:

Código PHP:
Ver original
  1. $insertar=mysql_query("insert into alumnos(nombre,curso,enfermedades) values
  2.        ('$_POST[nombre]','$_POST[curso]' , ' " . implode(', '$_POST[foo]) ." ' ");



El formulario es más largo pero el error lo indica en esa misma linea.

Si perdona, he modificado mi post anterior porque a mi también se me olvidaron, es este

$insertar=mysql_query("insert into alumnos(nombre,curso,enfermedades) values
('$_POST[nombre]','$_POST[curso]' , ' " . implode(', ', $_POST["foo"]) ." ' ", $conexion);

date cuenta que cuando utilizas una función php y la concatenas como las variables debes respetar las comillas para que se diferencie lo que es phpy por otro lado mysql
__________________
_________________________

Homlyne - Soporte Online

Última edición por homlyne; 27/11/2012 a las 07:43
  #13 (permalink)  
Antiguo 27/11/2012, 08:04
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 9 meses
Puntos: 65
Respuesta: Problema enviando checkbox a la base de datos.

Hola de nuevo homlyne.

Lo he vuelto a cambiar pero sigue sin enviarme nada a la base de datos, me estoy haciendo un buen lio... He intentando antes unir el primer insert con el envio desde el foreach por cada check pero tampoco me sale.

Si solo lo dejo como nombre y curso va bien:

Código PHP:
Ver original
  1. $insertar=mysql_query("insert into alumnos(nombre,curso) values
  2.         ('$_POST[nombre]','$_POST[curso]')");

Pero si lo vuelvo a intentar con los checks no envía nada como en el ejemplo de arriba o incluso probando asi:

Código PHP:
Ver original
  1. foreach($_POST['foo'] as $v)
  2.         {
  3.             $v ;          
  4.         }        
  5.  $insertar=mysql_query("insert into alumnos(nombre,curso,enfermedades) values
  6. ('$_POST[nombre]','$_POST[curso]' , ' " . implode(', ', $_POST["foo"]) ." ' ", $conexion);


¿en este caso que debo de meter en el foreach o que separar para luego unirlos?

Gracias, un saludo.
  #14 (permalink)  
Antiguo 27/11/2012, 10:10
Avatar de homlyne  
Fecha de Ingreso: noviembre-2012
Ubicación: Madrid
Mensajes: 59
Antigüedad: 12 años
Puntos: 10
Respuesta: Problema enviando checkbox a la base de datos.

Pero esta vez que error te sale?, el error anterior describía error de sintaxis y primero tenemos que ir corrigiendo errores para luego revisar la db, por eso te digo que postes los errores porque asi nos aclaramos mejor.... y por lo que me imagino seguirá dando error de sintaxis en la misma línea porque en los demás campos también falta diferenciar php de mysql en el nombre y el curso, error mio también por no fijarme.

$insertar=mysql_query("insert into alumnos(nombre,curso,enfermedades) values
('".$_POST[nombre]."','". $_POST[curso]."' , ' " . implode(', ', $_POST["foo"]) ." ' ", $conexion);

y otra cosa que te recomiendo es cuando tengas dudas si pasan o no bien las valores guardes la sentencia mysql en una variable y luego la visualizas, así comprobamos que los valores no esten vacíos por ej:

$consulta = "insert into alumnos(nombre,curso,enfermedades) values
('".$_POST[nombre]."','". $_POST[curso]."' , ' " . implode(', ', $_POST["foo"]) ." ' ";

echo $consulta; // para comprobar que no haya valores vacíos.

// mysql_query($consulta, $conexion); // si todo es correcto eliminas la línea de arriba y las dos barras del principio de está línea
__________________
_________________________

Homlyne - Soporte Online
  #15 (permalink)  
Antiguo 27/11/2012, 10:36
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 9 meses
Puntos: 65
Respuesta: Problema enviando checkbox a la base de datos.

Hola acabo de hacer otra prueba y si me da valores vacíos.

No es que me de un error si no que cuando añado enfermedades y $_POST["foo"] para enviar los elegidos a la base de datos pues que no envía nada y tengo un lio que ya no se ni como separarlos para que se envíen correctamente.

No se si ahora me explico mejor, primero hago una prueba con dos campos normales y esta sentencia se cumple bien:

Código PHP:
Ver original
  1. if(isset($_POST["enviar-ch"]))
  2.     {
  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. //Cierro la conexión
  17.         mysql_close($conexion);


Hasta ahi todo bien, pero si quiero añadir a todo esto la opción de los checkbox ¿como sería? he probado ya de varias maneras y nada... el formulario que uso es este:

Código PHP:
Ver original
  1. <form name="enfermedades" method="post" action="">
  2.         Nombre: <input type="text" name="nombre" /><br />
  3.         Curso: <input type="text" name="curso" /><br />    
  4.         <!--<input type="checkbox" name="foo[]" value="1" />
  5.         <input type="checkbox" name="foo[]" value="2" />
  6.         <input type="checkbox" name="foo[]" value="3" />
  7.         <input type="checkbox" name="foo[]" value="4" />
  8.         <input type="checkbox" name="foo[]" value="5" />
  9.         <input type="checkbox" name="foo[]" value="6" />-->
  10.         <?php
  11.         $enfermedades=array("Asma", "Epilepsia", "Esquizofrenia");
  12.         $cantidad=count($enfermedades);
  13.         for ($c=0; $c<$cantidad ; $c++) {
  14.             //Preparo tantos inputs como enfermedades tenga el array
  15.             echo '<input type="checkbox" name="foo[]" value="'.$enfermedades[$c].'" />'.$enfermedades[$c].'';
  16.         }      
  17.         ?>
  18.         <input type="submit" value="Enviar" name="enviar-ch" />
  19.     </form>

Y sigo intentando añadir la opción de enviar esos checks a la base de datos. Gracias de nuevo.
  #16 (permalink)  
Antiguo 27/11/2012, 12:37
 
Fecha de Ingreso: octubre-2011
Ubicación: Leon,gto.mx
Mensajes: 10
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: Problema enviando checkbox a la base de datos.

Por que no intentas hacer una TABLA en la base con los nombres de las enfermades y esos valores los pasas como parametros en la tabla que estas escribiendo, asi tendrias por ejemplo

jorge / manzana/ 1/2/3/4 donde cada numero podria representar una enfermedad

aunque despues tendrias que consultar a que corresponde cada numero.

Saludos
  #17 (permalink)  
Antiguo 27/11/2012, 14:13
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 9 meses
Puntos: 65
Respuesta: Problema enviando checkbox a la base de datos.

Hola cesar_romo64 la verdad sigo hecho un lio asi que vuelvo casi al principio pero solo con el foreach:

Código PHP:
Ver original
  1. <form name="enfermedades" method="post" action="">
  2.         Nombre: <input type="text" name="nombre" /><br />
  3.         Curso: <input type="text" name="curso" /><br />    
  4.         <input type="checkbox" name="foo[]"value="Asma" />Asma
  5.         <input type="checkbox" name="foo[]" value="Epilepsia" />Epilepsia
  6.         <input type="checkbox" name="foo[]" value="Esquizofrenia" />Esquizofrenia          
  7.         <input type="submit" value="Enviar" name="enviar-ch" />
  8.     </form>
  9.     <?php
  10.     if(isset($_POST["enviar-ch"]))
  11.     {      
  12.         $conexion=mysql_connect("localhost","root","vertrigo");
  13.         if(!$conexion)
  14.         {          
  15.             exit("Database Error: " .mysql_error());
  16.         }              
  17.         mysql_select_db("alumnos_a",$conexion);
  18.         $insertar=mysql_query("insert into alumnos(nombre,curso) values ('$_POST[nombre]','$_POST[curso]')");                      
  19.         foreach($_POST['foo'] as $v)
  20.         {          
  21.             $insertar .= mysql_query("insert into alumnos (enfermedades) values ('$_POST[foo][$v]')");                     
  22.         }                          
  23.         mysql_close($conexion);
  24.     }  
  25.     ?>

Ahora tengo el mismo problema que tenía al principio del mensaje ya que no logro meterlo todo de una vez, y vuelven a salir en diferentes filas ¿alguna última recomendación?
  #18 (permalink)  
Antiguo 27/11/2012, 15:31
 
Fecha de Ingreso: octubre-2011
Ubicación: Leon,gto.mx
Mensajes: 10
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: Problema enviando checkbox a la base de datos.

Cita:
Iniciado por kahlito Ver Mensaje
Hola acabo de hacer otra prueba y si me da valores vacíos.

No es que me de un error si no que cuando añado enfermedades y $_POST["foo"] para enviar los elegidos a la base de datos pues que no envía nada y tengo un lio que ya no se ni como separarlos para que se envíen correctamente.

No se si ahora me explico mejor, primero hago una prueba con dos campos normales y esta sentencia se cumple bien:

Código PHP:
Ver original
  1. if(isset($_POST["enviar-ch"]))
  2.     {
  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. //Cierro la conexión
  17.         mysql_close($conexion);


Hasta ahi todo bien, pero si quiero añadir a todo esto la opción de los checkbox ¿como sería? he probado ya de varias maneras y nada... el formulario que uso es este:

Código PHP:
Ver original
  1. <form name="enfermedades" method="post" action="">
  2.         Nombre: <input type="text" name="nombre" /><br />
  3.         Curso: <input type="text" name="curso" /><br />    
  4.         <!--<input type="checkbox" name="foo[]" value="1" />
  5.         <input type="checkbox" name="foo[]" value="2" />
  6.         <input type="checkbox" name="foo[]" value="3" />
  7.         <input type="checkbox" name="foo[]" value="4" />
  8.         <input type="checkbox" name="foo[]" value="5" />
  9.         <input type="checkbox" name="foo[]" value="6" />-->
  10.         <?php
  11.         $enfermedades=array("Asma", "Epilepsia", "Esquizofrenia");
  12.         $cantidad=count($enfermedades);
  13.         for ($c=0; $c<$cantidad ; $c++) {
  14.             //Preparo tantos inputs como enfermedades tenga el array
  15.             echo '<input type="checkbox" name="foo[]" value="'.$enfermedades[$c].'" />'.$enfermedades[$c].'';
  16.         }      
  17.         ?>
  18.         <input type="submit" value="Enviar" name="enviar-ch" />
  19.     </form>

Y sigo intentando añadir la opción de enviar esos checks a la base de datos. Gracias de nuevo.
orales es que yo uso Radio bottom y es diferente.........pero es similar en cierta forma, Intenta, ponerle en lugar de "foo[]" el nombre directo de la "variable", es decir algo asi: <input type= "checkbox" name "1" value =""/> para que no lo manejes como registro.

Dejame revisar mis codigos haber si algo te puede servir y los posteo, por lo pronto te paso la forma en que yo guardo en un proyecto anterior........

$arreglo_pregunta=explode("-", $_POST['P152']);
$valor = "insert INTO formato1_contestado (id_aplicacion, id_alumno,id_pregunta,id_respuesta,id_parametro)";
$valor .= "VALUES ('$id_aplicacion','$id_alumno',$arreglo_pregunta[0],$arreglo_pregunta[1],$arreglo_pregunta[2])";
$res = mysql_query($valor, $conexionbd) or die(mysql_error().$valor);
$state = true;

Esto me sirve para pasar los valores de cada ratio que pueden ser hasta 7 en alguna pregunta....

Saludos
  #19 (permalink)  
Antiguo 27/11/2012, 16:42
Avatar de homlyne  
Fecha de Ingreso: noviembre-2012
Ubicación: Madrid
Mensajes: 59
Antigüedad: 12 años
Puntos: 10
Respuesta: Problema enviando checkbox a la base de datos.

kahlito prueba con esto, recorriendo todos los campos del array $_POST

foreach($_POST as $enfermedades => $valor){
if(!isset($_POST["nombre"]) && !isset($_POST["curso"]))){
$insertar=mysql_query("insert into alumnos(nombre,curso,enfermedades) values
(".$_POST['nombre]."','".$_POST[curso]."' , ' " . $_POST["enfermedades"]." ' ", $conexion);
}
}
__________________
_________________________

Homlyne - Soporte Online
  #20 (permalink)  
Antiguo 28/11/2012, 04:02
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 9 meses
Puntos: 65
Respuesta: Problema enviando checkbox a la base de datos.

Hola de nuevo.

Finalmente he seguido repasando desde el primer post y creo que por fin lo he resuelto de esta manera:

Código PHP:
Ver original
  1. <form name="enfermedades" method="post" action="">
  2.         Nombre: <input type="text" name="nombre" /><br />
  3.         Curso: <input type="text" name="curso" /><br />    
  4.         <input type="checkbox" name="foo[]"value="Asma" />Asma
  5.         <input type="checkbox" name="foo[]" value="Epilepsia" />Epilepsia
  6.         <input type="checkbox" name="foo[]" value="Esquizofrenia" />Esquizofrenia          
  7.         <input type="submit" value="Enviar" name="enviar-ch" />
  8.     </form>
  9.     <?php
  10.     if(isset($_POST["enviar-ch"]))
  11.     {      
  12.         $conexion=mysql_connect("localhost","root","vertrigo");
  13.         if(!$conexion)
  14.         {          
  15.             exit("Database Error: " .mysql_error());
  16.         }              
  17.         mysql_select_db("alumnos_a",$conexion);                
  18.         foreach($_POST['foo'] as $v){          
  19.             $v  ;
  20.         }
  21.         $enfermedades = implode(",", $_POST['foo']);   
  22.         $insertar=mysql_query("insert into alumnos(nombre,curso,enfermedades) values
  23.         ('$_POST[nombre]','$_POST[curso]', '$enfermedades')");                     
  24.         mysql_close($conexion);
  25.     }  
  26.     ?>

Tenía un lio enorme, no se como puedo ser tan bruto

Muchas gracias a todos por vuestra ayuda, saludos

Etiquetas: checkbox, enviando, formulario, mysql, registro, sql, variables, usuarios
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 08:23.