Foros del Web » Programando para Internet » PHP »

Guardar Checkbox seleccionados en una base de datos.

Estas en el tema de Guardar Checkbox seleccionados en una base de datos. en el foro de PHP en Foros del Web. Hola compañeros, No sé cómo guardar los campos marcados de una lista de checkbox. He visitado todos los foros y blogs que hay en la ...
  #1 (permalink)  
Antiguo 23/02/2013, 20:05
 
Fecha de Ingreso: febrero-2013
Ubicación: En mi casa
Mensajes: 9
Antigüedad: 11 años, 9 meses
Puntos: 1
Busqueda Guardar Checkbox seleccionados en una base de datos.

Hola compañeros,

No sé cómo guardar los campos marcados de una lista de checkbox. He visitado todos los foros y blogs que hay en la red y no he podido conseguir hacerlo y ya estoy por tirar la toalla.... sois mi última solución.

Mis checkbox son una lista de los 12 meses del año, cuando marco un solo mes, si se se guarda en la base de datos, pero si selecciono más de uno, solo se guarda el último seleccionado. Quiero que se guarden todos los meses seleccionados en la base de datos separados por comas o puntos.

Displayar los meses seleccionado en php sí que lo sé hacer, pero guardarlos en la base de datos no. :\

Con este código los displayo en php:

Código PHP:
foreach($_POST['mes'] as $mes){
    echo 
$mes."<br>";
}; 
si me decís otra forma de poder guardar los meses seleccionado "ende que mejor"


Espero haberme explicado bien y que me ayudéis!:-)


Gracias!!
  #2 (permalink)  
Antiguo 24/02/2013, 07:24
Avatar de Knight_Rider  
Fecha de Ingreso: noviembre-2009
Ubicación: La House de mis viejos XD
Mensajes: 83
Antigüedad: 15 años
Puntos: 4
Respuesta: Guardar Checkbox seleccionados en una base de datos.

montándolo en un array? quedando como $mes[0],$mes[1],.... y guardando cada uno.... según corresponda,

o,

Podrías considerar cada mes,. como un input independiente, y marcar en este caso 12 campos en tu tabla correspondientes cada uno a un mes... y marcar con un 0 o 1 según haya sido seleccionado... no? de esta manera, podrás hacer busquedas por meses, buscando valores 1 en columna mes1 o mes2 o enero, febrero.. eso ya.. a tu gusto.
  #3 (permalink)  
Antiguo 24/02/2013, 10:56
 
Fecha de Ingreso: febrero-2013
Ubicación: En mi casa
Mensajes: 9
Antigüedad: 11 años, 9 meses
Puntos: 1
Sonrisa Respuesta: Guardar Checkbox seleccionados en una base de datos.

Hola de nuevo,

La verdad es que no te he entendido muy bien Knight_rider :\

Esto es lo que llevo hasta el momento:

Este es mi formulario html:
Código PHP:
<form id="agregar-frutas" name="agregar_fruta" action="agregar-frutas.php" method="POST" enctype="multipart/fomr-data">
    <fieldset>
        <legend>Agregar Futas</legend>
        <div>
            <label for="nombre_fruta">Nombre de la Fruta: </label>
            <input type="text" id="nombre" class="cambio"
            name="nombre" placeholder="Nombre de la fruta" title="Fruta" required />
        </div>

        <div>
            <label for="pais">País de procedencia:</label>
            <select id="pais" class="cambio" name="pais" required />
                <option value="">- - -</option>
                <?php  include_once("select-pais.php"); ?>
            </select>
        </div>

        <div>
            <label for="mes" name="">Mes de temporada:</label> <br />
                <input type='checkbox' name="mes[]"* value="enero">Enero
                <input type='checkbox' name="mes[]"* value="febrero">Febrero
                <input type='checkbox' name="mes[]"* value="marzo">Marzo
                <input type='checkbox' name="mes[]"* value="abril">Abril
                <input type='checkbox' name="mes[]"* value="abril">Mayo
                <input type='checkbox' name="mes[]"* value="abril">Junio
                <input type='checkbox' name="mes[]"* value="abril">Julio
                <input type='checkbox' name="mes[]"* value="abril">Agosto
                <input type='checkbox' name="mes[]"* value="abril">Septiembre
                <input type='checkbox' name="mes[]"* value="abril">Octubre
                <input type='checkbox' name="mes[]"* value="abril">Noviembre
                <input type='checkbox' name="mes[]"* value="abril">Diciembre
        </div>

        <div>
            <label for="imagen">Imagen: </label>
            <input type="file" id="imagen" name="imagen" title="Subir imagen..."/>
        </div>

        <div>
            <input type="submit" id="enviar-fruta" class="cambio" name="enviar_boton" value="agregar" />
        </div>
    </fieldset>
</form>
Y este es el archivo que recibe los datos del formulario:

Código PHP:
<?php
// Variables del formulario
$nombre $_POST["nombre"];
$pais $_POST["pais"];
foreach (
$_POST['mes'] as $mes);



//conexión a la Base de Datos
$conexion mysql_connect('localhost','root','');
if (!
$conexion) {
die(
"Fallo la conexión a la Base de Datos: " mysql_error());
}

// Selección de la Base de Datos a utilizar
$seleccionar_bd mysql_select_db('frutasverduras'$conexion);
if (!
$seleccionar_bd) {
die(
"Fallo la selección de la Base de Datos:" mysql_error());
}

// Insertar campos en la Base de Datos 
$insertar mysql_query("INSERT INTO frutas (nom_fruta, pais_procedencia, mes_temporada)
values ('$nombre', '$pais', '$mes')"
$conexion);
if (!
$insertar) {
die(
"Fallo en la insercion de registro en la Base de Datos: " mysql_error());
}

// Cerrar conexión a la Base de Datos
mysql_close($conexion);


?>
Y esta es mi tabla de la base de datos:

Código PHP:
CREATE TABLE frutas(
    
nom_fruta VARCHAR(50NOT NULL,
    
pais_procedencia VARCHAR(50NOT NULL,
    
mes_temporada VARCHAR(150NOT NULL,
    
imagen VARCHAR(50),
    
PRIMARY KEY(nom_fruta)
); 
Cómo hago para que cuando seleccione más de un mes, se guarden en el campo "mes temporada" separados por una coma? y así luego poder realizar una búsqueda por meses.

Como está ahoramismo solo se guarda el ultimo mes que se selecciona..

Espero que me ayuden.


pd: Seguro que como estoy haciendo esto no es la mejor forma, pero es como creo que es más fácil. Si alguien sabe como hacerlo de alguna otra mejor y me lo puede explicar.

Gracias!!!
  #4 (permalink)  
Antiguo 25/02/2013, 03:25
Avatar de Knight_Rider  
Fecha de Ingreso: noviembre-2009
Ubicación: La House de mis viejos XD
Mensajes: 83
Antigüedad: 15 años
Puntos: 4
Respuesta: Guardar Checkbox seleccionados en una base de datos.

Eeexacto fijate que todos los checkbox los tienes con el mismo name. Mes[] cambialo por el mes concreto y lo recojes como variables independientes. Y fijate que en todo el año abril solo hay uno...
  #5 (permalink)  
Antiguo 25/02/2013, 07:25
 
Fecha de Ingreso: febrero-2013
Ubicación: En mi casa
Mensajes: 9
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Guardar Checkbox seleccionados en una base de datos.

Gracias por la respuesta Knight_Rider,

Upss lo de value="abril" repetido ha sido un despiste al hacer copy & paste ejeejej gracias por la observación.

He intentado hacer lo que me has dicho, lo de recoger cada mes con variables independientes, pero al enviar el formulario sin haber seleccionado algún checkbox me da un error porque la variable está vacía.. :\

Cómo lo puedo solucionar?

Espero que me ayudes.

Gracias!!
  #6 (permalink)  
Antiguo 26/02/2013, 01:58
Avatar de Knight_Rider  
Fecha de Ingreso: noviembre-2009
Ubicación: La House de mis viejos XD
Mensajes: 83
Antigüedad: 15 años
Puntos: 4
Respuesta: Guardar Checkbox seleccionados en una base de datos.

Precisamente, tienes que indicarle mediante un comparador, if ($var == '') { $var = 0;} else { $var = 1;}
Perdona si no lo he puestomuy claro pero te lo he escrito desde el telefono y con tanto simbolo raro...
  #7 (permalink)  
Antiguo 03/03/2013, 16:41
 
Fecha de Ingreso: febrero-2013
Ubicación: En mi casa
Mensajes: 9
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Guardar Checkbox seleccionados en una base de datos.

Hola Knight_Rider,

Perdona que haya tardado tantos días en responder.

Sinceramene no te he entendido muy bien lo que tengo que hacer para poder guardar los meses seleccionados.. :\ y no se guarde el último que se ha seleccionado.

Gracias!!
  #8 (permalink)  
Antiguo 03/03/2013, 17:06
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Guardar Checkbox seleccionados en una base de datos.

Cita:
Iniciado por andres_ Ver Mensaje
Hola Knight_Rider,

Perdona que haya tardado tantos días en responder.

Sinceramene no te he entendido muy bien lo que tengo que hacer para poder guardar los meses seleccionados.. :\ y no se guarde el último que se ha seleccionado.

Gracias!!
mirá este ejemplo y fijate como trabaja el primer botón con el primer grupo de checkboxes
http://foros.emprear.com/php/boxes_js.php

asi como simplemente hago un echo
Código PHP:
Ver original
  1. for($i=0; $i < $totalSeleccionados; $i++){
  2. echo($opciones[$i] . " ");
  3.  
  4. }

vos actualizas tu BD


los otros botones son para ver como trabaja con javascript, asi que no los tengas en cuenta

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #9 (permalink)  
Antiguo 05/03/2013, 01:33
 
Fecha de Ingreso: julio-2009
Mensajes: 11
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Guardar Checkbox seleccionados en una base de datos.

Hice esto para ti, creo que es lo que buscas.

meses.php

Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Para Forosdelweb.com</title>
  6. </head>
  7.  
  8. <body>
  9. <?php @$badera=$_POST['bandera'];
  10. //si el formulario se envio
  11. if ($badera==1)
  12. {
  13.     echo '<h2>Seleccionaste los siguientes meses:</h2><br>';
  14.     ///verificamos que lo que se envio fue un array
  15.     if(is_array($_POST['checkbox']))
  16.     {
  17.         // realizamos el ciclo
  18.         while(list($key,$value) = each($_POST['checkbox']))
  19.         {
  20.             ///imprimimos el valor del actual checkbox
  21.             echo $value.'<br>';
  22.         }
  23.     }
  24. }
  25. //si no se ha enviado el formulario
  26. else
  27. {
  28. ?>
  29. <strong>Selecciona los meses de año que quieras:</strong><br>
  30. <form id="form1" name="form1" method="post" action="">
  31.   <p>Enero
  32.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Enero" /><br>
  33.     Febrero
  34.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Febrero" /><br>
  35.     Marzo
  36.     <input  name="checkbox[]" type="checkbox" id="checkbox" value="Marzo" /><br>
  37.     Abril
  38.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Abril" /><br>
  39.     Mayo
  40.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Mayo" /><br>
  41.     Junio
  42.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Junio" /><br>
  43.     Julio
  44.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Julio" /><br>
  45.     Agosto
  46.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Agosto" /><br>
  47.     Septiembre
  48.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Septiembre" /><br>
  49.     Octubre
  50.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Octubre" /><br>
  51.     Noviembre
  52.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Noviembre" /><br>
  53.     Diciembre
  54.     <input name="checkbox[]" type="checkbox" id="checkbox" value="Diciembre" /><br>
  55.    </p>
  56.   <p>
  57.     <input type="submit" name="button" id="button" value="Mostar Meses Marcados." />
  58.     <input name="bandera" type="hidden" id="bandera" value="1" />
  59.   </p>
  60. </form>
  61. <?php }?>
  62. </body>
  63. </html>

Etiquetas: checkbox, seleccionados
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 18:22.