Foros del Web » Programando para Internet » PHP »

grabar array en una bd

Estas en el tema de grabar array en una bd en el foro de PHP en Foros del Web. Hola a todos, tengo una duda ya que estoy pasando datos a traves de un formulario en php. Tengo los siguientes checkbox que quiero grabar ...
  #1 (permalink)  
Antiguo 29/08/2012, 14:22
 
Fecha de Ingreso: diciembre-2001
Ubicación: Argentina
Mensajes: 693
Antigüedad: 22 años, 4 meses
Puntos: 1
grabar array en una bd

Hola a todos, tengo una duda ya que estoy pasando datos a traves de un formulario en php. Tengo los siguientes checkbox que quiero grabar en una columna llamada deportes en mysql.
Código:
	<div>
							<input type="checkbox" class="checkbox" name="deportes[]"  value="Futbol">
							<label for="deportes1">Futbol</label><br>
							<input type="checkbox" class="checkbox" name="deportes[]"  value="Rugby">
							<label for="deportes2">Rugby</label><br>
							<input type="checkbox" class="checkbox" name="deportes[]"  value="Ciclismo">
							<label for="deportes3">Ciclismo</label><br>
							<input type="checkbox" class="checkbox" name="deportes[]"  value="Maraton">
							<label for="deportes4">Maraton</label><br>
							<input type="checkbox" class="checkbox" name="deportes[]"  value="Hockey">
							<label for="deportes5">Hockey</label><br>
							</div>
el codigo que utilizo para grabar los datos en la base de datos es el siguiente
Código:
<?
include("includes/conect.php");

$resultado = mysql_query("INSERT INTO registros 
(nombre, apellido, mail, pass, sexo, dia_cump, mes_cump, anio_cump, deportes) values ('{$_POST['nombre']}','{$_POST['apellido']}','{$_POST['mail']}','{$_POST['pass']}','{$_POST['sexo']}','{$_POST['dia_cump']}','{$_POST['mes_cump']}','{$_POST['anio_cump']}', '{$_POST['deportes']}')",$conexion);

header("Location: registro.php");
?>
el problema es que me graba en el campo de deportes la palabra array y no los deportes seleccionados como Futbol Rugby etc.

El campo en la base de datos es de tipo LONGTEXT

Alguien puede ayudarme porfavor muchas gracias!

saludos
  #2 (permalink)  
Antiguo 29/08/2012, 14:30
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: grabar array en una bd

y porque no tratas de guardar mejor todo en una sola cadena puedes usar esto

Código PHP:
Ver original
  1. implode(",", $array);
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 29/08/2012, 14:38
 
Fecha de Ingreso: diciembre-2001
Ubicación: Argentina
Mensajes: 693
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: grabar array en una bd

Dradi7 gracias por responder, decis que haga esto?

Código:
implode(",", $deportes);
?

pero no se donde lo tendria que colocar
  #4 (permalink)  
Antiguo 29/08/2012, 15:04
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: grabar array en una bd

Pues si, basicamente si recibes el array de checkbox por post

$deportes = $_POST['deportes];
$deportes = implode(',', $deportes);

y haces el insert con la variable en vez de $_POST directo

Última edición por memoadian; 29/08/2012 a las 15:20
  #5 (permalink)  
Antiguo 29/08/2012, 15:26
 
Fecha de Ingreso: diciembre-2001
Ubicación: Argentina
Mensajes: 693
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: grabar array en una bd

entonces sería algo asi, pero no me funciona

Código:
<?
include("includes/conect.php");

$deportes = $_POST['deportes'];
$deportes = implode(',', $deportes);
$resultado = mysql_query("INSERT INTO registros 
(nombre, apellido, mail, pass, sexo, dia_cump, mes_cump, anio_cump, deportes) values ('{$_POST['nombre']}','{$_POST['apellido']}','{$_POST['mail']}','{$_POST['pass']}','{$_POST['sexo']}','{$_POST['dia_cump']}','{$_POST['mes_cump']}','{$_POST['anio_cump']}', $deportes)",$conexion);

header("Location: registro.php");
?>
  #6 (permalink)  
Antiguo 29/08/2012, 16:33
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: grabar array en una bd

en tu formulario debes tener los checkbox así para que funcione:
Código HTML:
Ver original
  1. <input type="checkbox" value="1" name="deportes[]"/>
  2. <input type="checkbox" value="2" name="deportes[]"/>
  3. <input type="checkbox" value="3" name="deportes[]"/>
  4. <input type="checkbox" value="4" name="deportes[]"/>

el name debe tener corchetes.
  #7 (permalink)  
Antiguo 30/08/2012, 08:29
 
Fecha de Ingreso: diciembre-2001
Ubicación: Argentina
Mensajes: 693
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: grabar array en una bd

Memoadian, no me funciona de esa manera. En el campo deportes de la base de datos escribe la palabra Array. Tenes alguna otra solucion porfavor? saludos
  #8 (permalink)  
Antiguo 30/08/2012, 08:40
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: grabar array en una bd

yo probé el código en mi localhost y funciona bien, ¿estas marcando los checkbox? haz un debug de $_POST['deportes'] con print_r() si solo te llega array() significa que esta vacio.
  #9 (permalink)  
Antiguo 30/08/2012, 10:15
 
Fecha de Ingreso: diciembre-2001
Ubicación: Argentina
Mensajes: 693
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: grabar array en una bd

Memoadian, gracias por responder te cuento que

La consulta del form la mando a la misma pagina y hago esta consulta

Código:
<? echo print_r($_POST['deportes'])?>
Lo que me devuelve esto...

Array ( [0] => Maraton [1] => Hockey ) 1

pareciera que lo esta tomando pero en mi base de datos se escribe la palabra Array. Te cuento que esa celda de la base de datos esta como LONGTEXT, eso tiene algo que ver?
  #10 (permalink)  
Antiguo 30/08/2012, 11:52
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: grabar array en una bd

haz un debug de tu consulta, imprime como sale como aquí lo hice yo:

Código PHP:
Ver original
  1. <form method="post">
  2.     <table>
  3.         <tr>
  4.             <td><label>Nombre</label></td>
  5.             <td><input type="text" name="nombre"></td>
  6.         </tr>
  7.         <tr>
  8.             <td><label>Deportes</label></td>
  9.             <td>
  10.                 Futbol<input type="checkbox" name="deportes[]" value="futbol"/>
  11.                 Basket<input type="checkbox" name="deportes[]" value="basquetball"/>
  12.                 Baseball<input type="checkbox" name="deportes[]" value="baseball"/>
  13.                 Tennis<input type="checkbox" name="deportes[]" value="tennis"/>
  14.                 Otro<input type="checkbox" name="deportes[]" value="otro"/>
  15.             </td>
  16.         </tr>
  17.         <tr>
  18.             <td></td>
  19.             <td><input type="submit" value="Enviar"></td>
  20.         </tr>
  21.     </table>
  22. </form>
  23. <?php
  24. if(!empty($_POST['nombre'])){
  25.     $nombre = $_POST['nombre'];
  26.     $deportes = $_POST['deportes'];
  27.  
  28.     $deportes = implode(',', $deportes);
  29.     echo "INSERT INTO registros
  30.     (nombre, deportes)
  31.     values ('{$_POST['nombre']}', '$deportes')";
  32. }
  33. ?>
  #11 (permalink)  
Antiguo 30/08/2012, 12:01
 
Fecha de Ingreso: diciembre-2001
Ubicación: Argentina
Mensajes: 693
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: grabar array en una bd

me devolvio como resultado

INSERT INTO registros (nombre, deportes) values ('Carlos', 'Maraton,Hockey')

pareciera que esta bien no? pero no se porque no se guarda Maraton,Hockey en la db
  #12 (permalink)  
Antiguo 30/08/2012, 12:04
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: grabar array en una bd

pues si es muy raro, LONGTEXT es un tipo de campo que guarda caracteres (una gran cantidad) que no creo que necesites a menos que guardaras 4GB de texto, deberies usar TEXT

veamos, ahora que imprimes la consulta y sale bien, ejecutala directamente en el phpmyadmin como la imprime ahi debe salir algo.
  #13 (permalink)  
Antiguo 30/08/2012, 12:06
 
Fecha de Ingreso: diciembre-2001
Ubicación: Argentina
Mensajes: 693
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: grabar array en una bd

Perfecto, el problema era que cuando insertaba el valor de $deportes no lo estaba poniendo asi '$deportes'

Te agradezco muchisimo por tu ayuda!!!

saludos

Etiquetas: bd, formulario, mysql, registro
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 11:42.