Foros del Web » Programando para Internet » PHP »

PHP OO Insertar varios registros dinamicos generados a partir de una consulta

Estas en el tema de Insertar varios registros dinamicos generados a partir de una consulta en el foro de PHP en Foros del Web. Este dia les traigo una duda que me ha tenido con insomnio por un buen rato, lo que pasa es que deseo hacer un insert ...
  #1 (permalink)  
Antiguo 24/07/2012, 16:44
 
Fecha de Ingreso: julio-2012
Mensajes: 22
Antigüedad: 11 años, 9 meses
Puntos: 3
Insertar varios registros dinamicos generados a partir de una consulta

Este dia les traigo una duda que me ha tenido con insomnio por un buen rato, lo que pasa es que deseo hacer un insert a varios registros traidos desde una consulta, tales insert son dinamicos, a continuacion les pongo el codigo fuente k manejo para que me entiendan mejor.

Código PHP:
Ver original
  1. <?php
  2. include ("conexion.php");
  3. $grupo = $_POST['grupo'];
  4. $consultar = "SELECT matricula,nombre_alumno,nombre_grupo FROM grupos WHERE nombre_grupo = '$grupo'";
  5. $resultado = mysql_query($consultar,$conex);
  6. $num_rows = mysql_num_rows($resultado);
  7. if ($num_rows <= 0){
  8. echo "El grupo ".$grupo." esta vacio<br><br>";
  9. echo "Pulse <a href='frmRegistrar_Calificaciones.php'>aqui</a> si deseas buscar otro Grupo.<br><br>";
  10. echo "Pulse <a href='Inicio.php'>aqui</a> si desea ir a la pagina principal.";
  11. echo "<br><br><br>";
  12. include ("pie.php");
  13. mysql_close($conex);
  14. }elseif ($num_rows > 0){
  15. echo "<form action='Guardar_Calificaciones.php' method='POST'>";
  16. echo "\n<table align='center'>";
  17. echo "\n<tr><th>NOMBRE</th><th>L</th><th>W</th><th>G</th><th>S</th><th>A</th><th>R</th><th>PROM</th><th>NIV</th><th>MOD</th><th>PER</th><th>HRS</th><th>GRUPO</th></tr>";
  18. while ($fila = mysql_fetch_array($resultado))
  19. {
  20. echo "\n<input type='hidden' name='matricula[]' value='" . $fila["matricula"] . "'>";
  21. echo "<tr>";
  22. echo "<td><input type='text' name='nombre_alumno[]' value='" . $fila["nombre_alumno"] ."' readonly></td>";
  23. echo "<td><input type='text' name='L[]' value='' size='3'></td>";
  24. echo "<td><input type='text' name='W[]' value='' size='3'></td>";
  25. echo "<td><input type='text' name='G[]' value='' size='3'></td>";
  26. echo "<td><input type='text' name='S[]' value='' size='3'></td>";
  27. echo "<td><input type='text' name='A[]' value='' size='3'></td>";
  28. echo "<td><input type='text' name='R[]' value='' size='3'></td>";
  29. echo "<td><input type='text' name='promedio[]' value='' size='3'></td>";
  30. echo "<td><input type='text' name='nivel[]' value='' size='3'></td>";
  31. echo "<td><input type='text' name='modulo[]' value='' size='3'></td>";
  32. echo "<td><input type='text' name='periodo[]' value='' size='3'></td>";
  33. echo "<td><input type='text' name='horas[]' value='' size='3'></td>";
  34. echo "<td><input type='text' name='grupo[]' value='" . $fila["nombre_grupo"] . "' size='3'></td>";
  35. echo "</tr>";
  36. }
  37. echo "</table>";
  38. echo "<table align='center'>";
  39. echo "<tr><td><input type='submit' name='btnGuardar' value='GUARDAR'></td></tr>";
  40. echo "</table>";
  41. echo "</form>";
  42. }
  43. ?>

y el codigo que manejo para realizar el insert de los datos es el siguiente

Código PHP:
Ver original
  1. <?php
  2. include ("conexion.php");
  3. for($i=0;$i<$_POST['matricula'];$i++){
  4. $matricula = $_POST['matricula'][$i];
  5. $nombre_alumno = $_POST['nombre_alumno'][$i];
  6. $L = $_POST['L'][$i];
  7. $W = $_POST['W'][$i];
  8. $G = $_POST['G'][$i];
  9. $S = $_POST['S'][$i];
  10. $A = $_POST['A'][$i];
  11. $R = $_POST['R'][$i];
  12. $promedio = $_POST['promedio'][$i];
  13. $nivel = $_POST['nivel'][$i];
  14. $modulo = $_POST['modulo'][$i];
  15. $periodo = $_POST['periodo'][$i];
  16. $horas = $_POST['horas'][$i];
  17. $grupo = $_POST['grupo'][$i];
  18. $consulta = "INSERT INTO Calificaciones (matricula,nombre_alumno,listening,writing,grammar,speaking,attitude,reading,promedio,nivel,modulo,periodo,horas,grupo)
  19.                 VALUES ($matricula,'$nombre_alumno',$L,$W,$G,$S,$A,$R,$promedio,$nivel,$modulo,'$periodo',$horas,'$grupo')";
  20. $resultado = mysql_query($consulta,$conex);
  21. echo $consulta;
  22. echo "SE GUARDO CON EXITO";
  23. mysql_close($conex);}
  24. ?>


El codigo de insercion lo tome de un post anterior, solo que no me funciono, por eso acudo a ustedes..

http://www.forosdelweb.com/f18/insertar-multiples-registros-dinamicos-763571/
  #2 (permalink)  
Antiguo 24/07/2012, 16:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Insertar varios registros dinamicos generados a partir de una consulta

Los campos listening, writing, etc., son numéricos?

Por otra parte, no estás haciendo validación de los datos, simplemente los tomas y tratas de insertar, lo cual es un problema porque no sabes si el alumno realmente existe o si la información se va a duplicar o si hay algún error.

Luego, como no mencionas cuál es exactamente el problema:

$resultado = mysql_query($consulta, $conex) or die(mysql_error);

Y luego nos cuentas si te da error y lo que obtienes de echo $consulta;
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 24/07/2012, 17:10
 
Fecha de Ingreso: julio-2012
Mensajes: 22
Antigüedad: 11 años, 9 meses
Puntos: 3
Respuesta: Insertar varios registros dinamicos generados a partir de una consulta

ya añadi $resultado = mysql_query($consulta, $conex) or die(mysql_error);

a mi codigo, lo que obtengo de echo $consulta;

es la cadena SQL y los valores que se inserten, solo que ahora que añadi or die a mi codigo al momento de insertar solo me muestra mysql_error
  #4 (permalink)  
Antiguo 24/07/2012, 17:13
 
Fecha de Ingreso: julio-2012
Mensajes: 22
Antigüedad: 11 años, 9 meses
Puntos: 3
Respuesta: Insertar varios registros dinamicos generados a partir de una consulta

y los campos:

matricula INT
,nombre_alumno VARCHAR
,listening TINYINT
,writing TINYINT
,grammar TINYINT
,speaking TINYINT
attitude TINYINT
,reading TINYINT
,promedio VARCHAR
,nivel TINYINT
,modulo TINYINT
,periodo VARCHAR
,horas TINYINT
,grupo CHAR
  #5 (permalink)  
Antiguo 24/07/2012, 17:19
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Insertar varios registros dinamicos generados a partir de una consulta

Sorry, un pequeño error en la sugerencia!

debe ser or die(mysql_error()) porque es una función y ahí se va a ver el error real.

Qué pasa si dejas en blanco uno de los campos numéricos?, digamos, speaking... a la hora de armar la consulta será una cadena vacía, que MySQL tal vez interprete como NULL, pero si la columna no permite NULL, entonces por ahí viene el error.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 24/07/2012, 17:28
 
Fecha de Ingreso: julio-2012
Mensajes: 22
Antigüedad: 11 años, 9 meses
Puntos: 3
Respuesta: Insertar varios registros dinamicos generados a partir de una consulta

si dejo un campo en blanco me mandara un error, ya que no permito valores nulos en la BD.

pero mi principal problema es que deseo insertar los valores en los campos generados dinamicamente a partir de la consulta
  #7 (permalink)  
Antiguo 24/07/2012, 17:32
 
Fecha de Ingreso: julio-2012
Mensajes: 22
Antigüedad: 11 años, 9 meses
Puntos: 3
Respuesta: Insertar varios registros dinamicos generados a partir de una consulta

Otro detalle que se me escapaba era que la consulta es generada a partir de este codigo

Código PHP:
Ver original
  1. <?php
  2. <form action="Registrar_Calificaciones.php" method="POST">
  3. <fieldset align="center">
  4.     <br>
  5.     <table align="center" border="0">
  6.         <td>GRUPO:</td>
  7.         <td id="estilo"><input type="text" name="grupo" value="" onChange="javascript:this.value=this.value.toUpperCase();"></td>
  8.         <td id="estilo"><input type="submit" name="btnBuscar" value="BUSCAR"></td>
  9.     </table>
  10.     <br>
  11. </fieldset>
  12. </form>
  13. ?>
  #8 (permalink)  
Antiguo 24/07/2012, 17:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Insertar varios registros dinamicos generados a partir de una consulta

Bueno, ahora dime si te da error de mysql después de haber agregado or die(mysql_error()) y cuál es ese error.

Realmente no importa si generas el formulario agregando campos con Javascript, en php o directamente con HTML, siempre y cuando lo hagas correctamente.

Puedes ver el contenido de $_POST para saber si todo viene bien desde el formulario, usando al inicio de tu código:

Código PHP:
Ver original
  1. var_dump($_POST);
  2. die();

Si ves que hay algo mal ahí, entonces regresa a ver cómo estás creando los campos y corregir los posibles errores.

Por cierto:
Código HTML:
Ver original
  1. <td id="estilo"><input type="text" name="grupo" value="" onChange="javascript:this.value=this.value.toUpperCase();"></td>
  2. <td id="estilo"><input type="submit" name="btnBuscar" value="BUSCAR"></td>

- Los id deben ser únicos, no puedes tener dos elementos (en este caso dos TD) con igual id
- Los atributos deben ser todos en minúsculas, de forma que onChange debe ser onchange
- Para los nombres de variables, propiedades y métodos de objetos en javascript sí debes respetar mayúsculas y minúsculas
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 24/07/2012, 17:55
 
Fecha de Ingreso: julio-2012
Mensajes: 22
Antigüedad: 11 años, 9 meses
Puntos: 3
Respuesta: Insertar varios registros dinamicos generados a partir de una consulta

te agradesco que estes tomando de tu tiempo para ayudarme con mi problema, y el onChange no creo que se el problema, ya que en ninguno de mi otros formularios me da error, el detalle es que solo me esta insertando un solo registro, los demas no los toma en mi array
  #10 (permalink)  
Antiguo 24/07/2012, 18:01
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Insertar varios registros dinamicos generados a partir de una consulta

Mi estimado tony_la09, HAY QUE LEER LOS MENSAJES COMPLETOS y hacer caso de todas las sugerencias, lo de los id únicos, onChange y esos pequeños detalles son sólo para cumplir con un estándar de codificación, buscando evitar problemas entre los diferentes navegadores y, por supuesto, no van a solucionar el problema en PHP.


Agrego, a propósito de los estándares, si ves el código fuente del navegador encontrarás algo parecido a esto:
Código HTML:
Ver original
  1. <input type="hidden" bla bla bla />
  2. <tr>
  3. <td>Aquí otros inputs</td>
  4. <td>Aquí otros inputs</td>
  5. </tr>

Y es incorrecto, porque el campo, aunque sea oculto, debe estar dentro de un contenedor válido, en este caso, un td, simplemente lo pones junto con otro campo y listo!
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 24/07/2012 a las 18:10
  #11 (permalink)  
Antiguo 24/07/2012, 18:28
 
Fecha de Ingreso: julio-2012
Mensajes: 22
Antigüedad: 11 años, 9 meses
Puntos: 3
Respuesta: Insertar varios registros dinamicos generados a partir de una consulta

Muchas gracias por tu tiempo Triby, ya arregle mi problema, era en el ciclo for, no estaba incluyendo mi include("conexion.php") dentro de dicho ciclo..

dejo el codigo para futuras referencias...

Código PHP:
Ver original
  1. <?php
  2. for($i=0;$i<=30;$i++){
  3. include ("conexion.php");
  4. $matricula = $_POST['matricula'][$i];
  5. $nombre_alumno = $_POST['nombre_alumno'][$i];
  6. $L = $_POST['L'][$i];
  7. $W = $_POST['W'][$i];
  8. $G = $_POST['G'][$i];
  9. $S = $_POST['S'][$i];
  10. $A = $_POST['A'][$i];
  11. $R = $_POST['R'][$i];
  12. $promedio = $_POST['promedio'][$i];
  13. $nivel = $_POST['nivel'][$i];
  14. $modulo = $_POST['modulo'][$i];
  15. $periodo = $_POST['periodo'][$i];
  16. $horas = $_POST['horas'][$i];
  17. $grupo = $_POST['grupo'][$i];
  18. $consulta = "INSERT INTO Calificaciones (matricula,nombre_alumno,listening,writing,grammar,speaking,attitude,reading,promedio,nivel,modulo,periodo,horas,grupo)";
  19. $consulta = $consulta."VALUES ($matricula,'$nombre_alumno',$L,$W,$G,$S,$A,$R,$promedio,$nivel,$modulo,'$periodo',$horas,'$grupo')";
  20. $resultado = mysql_query($consulta,$conex) or die (mysql_error());
  21. echo $consulta;
  22. echo "SE GUARDO CON EXITO";
  23. mysql_close($conex);}
  24. ?>

Ahora vere lo de validar los campos, gracias por tu tiempo amigo...

Etiquetas: dinamicos, generados, mysql, registro, registros
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 12:15.