Foros del Web » Programando para Internet » PHP »

Insertar un array en una tabla de MySQL

Estas en el tema de Insertar un array en una tabla de MySQL en el foro de PHP en Foros del Web. Que tal amigos, un cordial saludo para todos ustedes agradeciendo anticipadamente su ayuda. Tengo un problema: - He creado un formulario para poner la asistencia ...
  #1 (permalink)  
Antiguo 09/04/2012, 14:59
 
Fecha de Ingreso: marzo-2012
Mensajes: 84
Antigüedad: 12 años, 8 meses
Puntos: 3
Insertar un array en una tabla de MySQL

Que tal amigos, un cordial saludo para todos ustedes agradeciendo anticipadamente su ayuda. Tengo un problema:
- He creado un formulario para poner la asistencia de unos alumnos.
- En un input de tipo text pinto en un array los alumnos que ha ingresado el profesor y los que va a ir agregando poco a poco (tomado de una tabla de MySQL llamada ml_dat_ALUMNOS).
- En otro input de tipo text está en blanco para que el profesor ingrese la asistencia del alumno.
- En el último input de tipo text se ingresa la fecha.
- Con un submit envío el formulario de todos los array en la tabla llamada ml_dat_ASISTENCIA.

MI PROBLEMA:
No me almacena todos los registros, sino solamente el primero. ¿Cuál sería la sentencia correcta para ingresar el Array en la tabla ml_dat_ASISTENCIA de MySQL?

Código formulario
Código PHP:
<?php
   
   $usu_alum
=mysql_query("SELECT ID_ALUMNO FROM ml_dat_ALUMNO WHERE ID_GRUPO = '$nombre_gpo'");
                           
   
   
   echo 
"<table width='765' border='2' align='left'>";
   
   echo 
'<form action="CONEXION_ASISTENCIA.php" id="asist" method="POST">';

echo 
"<tr>";

echo 
"<td width='236' bgcolor='#C4CDFD' align='center'><font size='-1'><font face='Arial'><b>Alumno</b></td>";

echo 
"<td width='236' bgcolor='#C4CDFD' align='center'><font size='-1'><font face='Arial'><b>Asistencia</b></td>";

echo 
"<td width='236' bgcolor='#C4CDFD' align='center'><font size='-1'><font face='Arial'><b>Fecha de asistencia</b></td>";

echo 
"</tr>";

while (
$row_asist mysql_fetch_array($usu_alum)){

echo 
"<tr> \n";

echo 
"<input type='text' name='ID_GRUP[]' id='ID_GRUP' value='$row_gpo[0]' />";

echo 
"<td width='236' bgcolor='#C4CDFD' align='center'><input type='text' name='ALUMNOS[]' size='20' maxlength='20' value='$row_asist[0]'><font size='-1'><font face='Arial'></td></input> \n";

echo 
"<td width='236' bgcolor='#C4CDFD' align='center'><input type='text' name='ASIST[]' size='20' maxlength='20' value=''><font size='-1'><font face='Arial'></td></input> \n";

echo 
"<td width='236' bgcolor='#C4CDFD' align='center'><input type='text' name='FECHA_ASISTENCIA[]' size='20' maxlength='20' value=''><font size='-1'><font face='Arial'></td></input> \n";

echo 
"</tr> \n";

}

echo 
"<td width='236' bgcolor='#C4CDFD' align='center'><input type='submit' name='ENVIAR' id='ENVIAR' value='Guardar'><input type='reset' name='RESTABLECER' id='RESTABLECER' value='Borrar datos'><font size='-1'><font face='Arial'></td> \n";

echo 
"</font>";

echo 
"</table> \n";
 
echo 
'</form>';
 
 
?>
Código del envío a MySQL
Código PHP:
<?php
$conexion
=mysql_connect("localhost","---------------","-----------------");
if (!
$conexion) {
die(
"Fallo la conexión a la Base de Datos: " mysql_error());
}
$db=mysql_select_db("---------------------",$conexion);
if (!
$db) {
die(
"Fallo la selección de la Base de Datos: " mysql_error());
}

$GRUPO=$_POST['ID_GRUP'];
$ALUMNO=$_POST['ALUMNOS'];
$ASISTENCIA=$_POST['ASIST'];
$FECHA_ASISTENCIA=$_POST['FECHA_ASISTENCIA'];
    


for(
$i=0$i<sizeof($GRUPO); $i++) 
{


$insertar=mysql_query("INSERT INTO ml_dat_ASISTENCIA(ID_GRUPO,ID_ALUMNO,ASISTENCIA,FECHA_ASIST) VALUES('$GRUPO[$i]','$ALUMNO[$i]','$ASISTENCIA[$i]','$FECHA_ASISTENCIA[$i]')",$conexion); 

if (!
$insertar) {
die(
"Fallo en la insercion de registro en la Base de Datos: " mysql_error());
}

mysql_close($conexion);

echo 
'<script>alert("Los datos han sido almacenados en la base de datos");</script>';
        echo 
'<SCRIPT LANGUAGE="javascript">
        location.href="MILISTA_BD_ASIST.php";
        </SCRIPT>'
;
}

?>
Gracias y saludos.
  #2 (permalink)  
Antiguo 09/04/2012, 15:11
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: Insertar un array en una tabla de MySQL

hola

ok esta bien, pero mejor usa un count para recorrer el array

Código PHP:
Ver original
  1. <?php
  2. $conexion=mysql_connect("localhost","---------------","-----------------");
  3. if (!$conexion) {
  4. die("Fallo la conexión a la Base de Datos: " . mysql_error());
  5. }
  6. $db=mysql_select_db("---------------------",$conexion);
  7. if (!$db) {
  8. die("Fallo la selección de la Base de Datos: " . mysql_error());
  9. }
  10.  
  11. $GRUPO=$_POST['ID_GRUP'];
  12. $ALUMNO=$_POST['ALUMNOS'];
  13. $ASISTENCIA=$_POST['ASIST'];
  14. $FECHA_ASISTENCIA=$_POST['FECHA_ASISTENCIA'];
  15. $count_reg = count($GRUPO);    
  16.  
  17.  
  18. for($i=0; $i< $count_reg ; $i++)  
  19. {
  20.  
  21.  
  22. $insertar=mysql_query("INSERT INTO ml_dat_ASISTENCIA(ID_GRUPO,ID_ALUMNO,ASISTENCIA,FECHA_ASIST) VALUES('$GRUPO[$i]','$ALUMNO[$i]','$ASISTENCIA[$i]','$FECHA_ASISTENCIA[$i]')",$conexion);  
  23.  
  24.    if (!$insertar) {  
  25.       die("Fallo en la insercion de registro en la Base de Datos: " . mysql_error());
  26.   }
  27.  
  28.  
  29. }
  30.  
  31.  
  32.  
  33. echo '<script>alert("Los datos han sido almacenados en la base de datos");</script>';
  34.         echo '<SCRIPT LANGUAGE="javascript">
  35.        location.href="MILISTA_BD_ASIST.php";
  36.        </SCRIPT>';  // lo puedes generar despues de que termine el bucle para que solo te lo muestra una vez ,
  37.  
  38. mysql_close($conexion); // cerrar la conexion despues del bucle
  39.  
  40. ?>
  #3 (permalink)  
Antiguo 09/04/2012, 15:12
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 9 meses
Puntos: 128
Respuesta: Insertar un array en una tabla de MySQL

Hola chubse, creo que primero deberías ordenar tú código, para hacer una lectura de manera más fluida y fácil hacía las personas que te puedan ayudar, no es necesario colocar tanto echo basta con utilizar uno y escribir todo el html dentro, lo otro nosé dónde enseñaran la siguiente sintaxis :


Código HTML:
Ver original
  1. <td width='236' bgcolor='#C4CDFD' align='center'>
  2.             <input type='text' name='ALUMNOS[]' size='20' maxlength='20' value='$row_asist[0]'>
  3.             <font size='-1'><font face='Arial'>
  4.             </td>
  5.         </input> \n

Creo que tienes un gran problema por delante, que es aprender html antes que intentes programar las etiquetas input no utilizan un cierre posterior de estas , lo otro que se supone que hace el font size a continuación del input, compadre para eso existe css estas críticas las hago para que puedas cambiar la forma de programar antes de buscar tu problema, que por cierto ya tengo identificado.



Saludos.








Pd: por favor arregla tú código y con gusto te ayudo.
__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #4 (permalink)  
Antiguo 09/04/2012, 17:07
 
Fecha de Ingreso: marzo-2012
Mensajes: 84
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Insertar un array en una tabla de MySQL

Gracias por tu sugerencia informacionsys pero no me funcionó, sigue enviando solamente el primer registro. Te agradezco tus sugerencias y críticas bUllan9ebrio, sé que tiene varios errores de sintaxis pero como este código ya había sido desarrollado por otra persona yo sólo lo continué modificando ciertas cosas y preferí darle la prioridad al funcionamiento, pero si eso es suficiente para brindarme apoyo te pongo el código una vez más (un poco más corregido):

Código PHP:
<?php 
$gpo
$_SESSION[grupo];
$usuario_gpo=mysql_query("SELECT ID_GRUPO,GRUPO_NUMERO FROM ml_dat_GRUPO WHERE GRUPO_NUMERO = '$gpo'");
$row_gpo mysql_fetch_row($usuario_gpo);
$nombre_gpo=$row_gpo[0];
    
$usu_alum=mysql_query("SELECT ID_ALUMNO FROM ml_dat_ALUMNO WHERE ID_GRUPO = '$nombre_gpo'"); 
 
echo 
'<form action="CONEXION_ASISTENCIA.php" id="asist" method="POST">

while ($row_asist = mysql_fetch_array($usu_alum)){ 

<input type="hidden" name="ID_GRUP[]" id="ID_GRUP" value="$row_gpo[0]"><br>
<input type="text" name="ALUMNOS[]" value="$row_asist[0]"><br>
<input type="text" name="ASIST[]" value=""><br>
<input type="text" name="FECHA_ASISTENCIA[]" value=""><br>



<input type="submit" name="ENVIAR" id="ENVIAR" value='
Guardar'>
<input type='
reset' name='RESTABLECER' id='RESTABLECER' value='Borrar datos'>
</form>'

  
 
?>
  #5 (permalink)  
Antiguo 09/04/2012, 17:25
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: Insertar un array en una tabla de MySQL

Porqué quieres ingresar un array? Quiero decir, porque no insertarlo en la base de datos a modo de lista, separado por comas por ejemplo.
Siempre se puede al sacar los datos de una db modificarlos y podrías entonces pasar la lista a array.
  #6 (permalink)  
Antiguo 09/04/2012, 17:54
 
Fecha de Ingreso: marzo-2012
Mensajes: 84
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Insertar un array en una tabla de MySQL

Que tal zalito12, gracias por tu respuesta pero no entiendo cómo hacerlo, ¿acaso sería con un serialize? Crees que podrías ser un poco más descriptivo o algún ejemplo, me ayudarías mucho.

Gracias y saludos
  #7 (permalink)  
Antiguo 10/04/2012, 04:24
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: Insertar un array en una tabla de MySQL

Perdona, había leído mal y malinterprete lo que querías. Debería funcionar si no hay por ahí algún fallo que ha pasado desapercibido.
Me gustaría saber la estructura que tiene la tabla 'ml_dat_ASISTENCIA', no vaya a ser que por algún caso tenga ID_GRUPO como PK y por eso solo te guarde el primero, ya que todos llevan el mismo id de grupo.

En cualquier caso, añade un mysql_error() a la sentencia de insert para ver que fallos te puede estar dando:
Código PHP:
$insertar=mysql_query("INSERT INTO ml_dat_ASISTENCIA(ID_GRUPO,ID_ALUMNO,ASISTENCIA,FECHA_ASIST) VALUES('$GRUPO[$i]','$ALUMNO[$i]','$ASISTENCIA[$i]','$FECHA_ASISTENCIA[$i]')",$conexion)or die(mysql_error()); 
  #8 (permalink)  
Antiguo 10/04/2012, 11:12
 
Fecha de Ingreso: marzo-2012
Mensajes: 84
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Insertar un array en una tabla de MySQL

Gracias zalito12 por tu aportación pero or die(mysql_error()); lo pongo dentro del if, entonces cuando existe algún error me dice en qué línea pero en esta ocasión no me marca ninguno y me señala que han sido añadido los registro satisfactoriamente, sin embargo sólo me inserta el primero. De cualquier forma te pongo como está la estructura de la tabla:

* ml_dat_ASISTENCIA -------- ID_ASISTENCIA (int, autoincrement, Primary key), ID_GRUPO (int, Primary key), ID_ALUMNO (int, Primary key), ASISTENCIA (varchar) y FECHA_ASIST (date).

Gracias amigo
  #9 (permalink)  
Antiguo 10/04/2012, 14:23
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: Insertar un array en una tabla de MySQL

Vale, no estoy seguro pero puede que sea por algo que te comentaba antes. Prueba esto, haz un ALTER TABLE y quita el PK (Primary Key) a ID_GRUPO y a ID_ALUMNO.

Por si a caso pon un echo dentro del bucle, por ejemplo echo $i; para ver si entra y hace todas las iteraciones
  #10 (permalink)  
Antiguo 11/04/2012, 13:33
 
Fecha de Ingreso: marzo-2012
Mensajes: 84
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Insertar un array en una tabla de MySQL

Que tal zalito12, agradezco tu ayuda pero ya hice lo que me sugeriste y me sigue insertando sólo un registro, ¿qué podría ser?
  #11 (permalink)  
Antiguo 11/04/2012, 14:23
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: Insertar un array en una tabla de MySQL

Vale, vamos a ver si identificamos el problema.
Pon un echo antes del bucle que imprima el tamaño del array $grupo
Pon un echo al final del bucle que imprima $i para ver cuantas iteraciones ha hecho
  #12 (permalink)  
Antiguo 16/04/2012, 13:59
 
Fecha de Ingreso: marzo-2012
Mensajes: 84
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Insertar un array en una tabla de MySQL

Perdón por la tardanza zalito12, ya puse un echo antes del bucle y ¿qué crees? sólo me cuenta 1 registro, entonces al parecer ese es el problema. Ya utilicé un sizeof y un count, ¿cuál sería la manera correcta de contar el número de registros?

Código PHP:
$gpo$_SESSION[grupo];
        
$usuario_gpo=mysql_query("SELECT ID_GRUPO,GRUPO_NUMERO FROM ml_dat_GRUPO WHERE GRUPO_NUMERO = '$gpo'");
        
$row_gpo mysql_fetch_row($usuario_gpo);
        
$nombre_gpo=$row_gpo[0];

$usu_alum=mysql_query("SELECT ID_ALUMNO FROM ml_dat_ALUMNO WHERE ID_GRUPO = '$nombre_gpo'");

$n=count($usu_alum); // o así
$n=sizeof($usu_alum); 
  #13 (permalink)  
Antiguo 17/04/2012, 02:14
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: Insertar un array en una tabla de MySQL

No no, count($usu_alum) te devuelve uno porq sólo has seleccionado un campo en la consulta, ese array es el primer registro, para ver el número de registros que has obtenido en la consulta utiliza:
mysql_num_rows($usu_alum);

Insisto en que busques esto:
Código PHP:
for($i=0$i<sizeof($GRUPO); $i++)  



$insertar=mysql_query("INSERT INTO ml_dat_ASISTENCIA(ID_GRUPO,ID_ALUMNO,ASISTENCIA,FECHA_ASIST) VALUES('$GRUPO[$i]','$ALUMNO[$i]','$ASISTENCIA[$i]','$FECHA_ASISTENCIA[$i]')",$conexion);  

if (!
$insertar) { 
die(
"Fallo en la insercion de registro en la Base de Datos: " mysql_error()); 

Y pongas:
Código PHP:
echo count($GRUPO);
for(
$i=0$i<sizeof($GRUPO); $i++)  



$insertar=mysql_query("INSERT INTO ml_dat_ASISTENCIA(ID_GRUPO,ID_ALUMNO,ASISTENCIA,FECHA_ASIST) VALUES('$GRUPO[$i]','$ALUMNO[$i]','$ASISTENCIA[$i]','$FECHA_ASISTENCIA[$i]')",$conexion);  

if (!
$insertar) { 
die(
"Fallo en la insercion de registro en la Base de Datos: " mysql_error()); 

echo 
$i
para ver que está pasando

Etiquetas: formulario, mysql, arreglos
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 21:44.