Foros del Web » Programando para Internet » PHP »

como insertar registros en masa

Estas en el tema de como insertar registros en masa en el foro de PHP en Foros del Web. buenas mi pregunta es como puedo insertar varios registros en de un solo golpe ya que etoy generando una consulta con en while la cual ...
  #1 (permalink)  
Antiguo 16/07/2012, 07:25
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 11 años, 9 meses
Puntos: 1
Exclamación como insertar registros en masa

buenas mi pregunta es como puedo insertar varios registros en de un solo golpe ya que etoy generando una consulta con en while la cual me termina mostrando todos los alumnos de una tabla pero quiero colocar unos input de tipo text para insertarles las notas de cada uno al tiempo y no se como hacerlo coloco el codigo de la consulta y hojala me puedan ayudar.

Código PHP:
$consulta="SELECT* FROM alumnos WHERE Grado=segundo";
$resultado=mysql_query($consulta,conexion);

echo 
'<table borde="1">';
echo 
'<tr>';
echo 
'<th>'.'nombres'.'</th>';
echo 
'<th>'.'grado'.'</th>';
echo 
'<tr>';
while(
$fila=mysql_fetch_array($resultado))
{
echo 
'</tr>';
echo 
'<th>'.'$fila['Nombre']'.'</th>';
echo 
'<th>'.'$fila['Grado']'.'</th>';
echo 
'</tr>';
}
echo 
'</table>'
espero que me puedan ayudar con ideas o recomendaciones gracias de antemano
__________________
Luis Alfonso Cruz Valbuena
[email protected]
  #2 (permalink)  
Antiguo 16/07/2012, 08:58
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 10 meses
Puntos: 55
Respuesta: como insertar registros en masa

lo primero es saber exactamente que quieres hacer

otra cosa es que cuando hagas la consulta cuentes cuantos alumnos te resulto, y a partir de alli creas el numero de input text necesarios, luego lo recoges de igual forma y listo
__________________
<?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?>
...Error en linea: 1 o.O
  #3 (permalink)  
Antiguo 16/07/2012, 09:17
 
Fecha de Ingreso: abril-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: como insertar registros en masa

Buenas amigo(a) supongamos que en la base de datos tienes id,nombre,grado,etc..., y lo que quieres hacer es poner la nota de cada uno de los estudiantes y al guardar te la guarde en cada uno de ellos esta es la solucion:
Código PHP:
Ver original
  1. $consulta="SELECT* FROM alumnos WHERE Grado=segundo";
  2. $resultado=mysql_query($consulta,conexion);
  3.  
  4. echo '<table borde="1">';
  5. echo '<tr>';
  6. echo '<th>'.'nombres'.'</th>';
  7. echo '<th>'.'grado'.'</th>';
  8. echo '<th>'.'Nota'.'</th>';
  9. echo '<tr>';
  10. while($fila=mysql_fetch_array($resultado))
  11. {
  12. echo '</tr>';
  13. echo '<th>'.'$fila['Nombre']'.'</th>';
  14. echo '<th>'.'$fila['Grado']'.'</th>';
  15. echo '<th>
  16. <form action="" method="post" name="formulario">
  17. <input type="text" name="nota[]" /><input name="id_estudiante[]" type="hidden" value="'.'$fila['id_estudiante']'.'" /></form></th>';
  18. echo '</tr>';
  19. }
  20. echo '</table>';

y en donde procesa la nota pon asi
Código PHP:
Ver original
  1. foreach($_POST['id_estudiante'] as $valor){
  2.   $consulta="UPDATE alumnos SET '.$_POST['nota'][$valor] .' WHERE id_estudiante=".$valor;
  3. $resultado=mysql_query($consulta,conexion);
  4. }
  #4 (permalink)  
Antiguo 16/07/2012, 09:30
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: como insertar registros en masa

Cita:
Iniciado por johhan16 Ver Mensaje
lo primero es saber exactamente que quieres hacer

otra cosa es que cuando hagas la consulta cuentes cuantos alumnos te resulto, y a partir de alli creas el numero de input text necesarios, luego lo recoges de igual forma y listo
bueno lo que pasa es que hay que insetarlos en otra tabla llamada nota bueno y realizando el

Código PHP:
$contar=mysql_num_rows($resultado); 
como hacerlo, que código me recomienda

gracias

johhan16
__________________
Luis Alfonso Cruz Valbuena
[email protected]
  #5 (permalink)  
Antiguo 16/07/2012, 09:42
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 10 meses
Puntos: 55
Respuesta: como insertar registros en masa

fijate primero si te funciona lo que te coloco elegidoneo1

sino me avisas
__________________
<?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?>
...Error en linea: 1 o.O
  #6 (permalink)  
Antiguo 16/07/2012, 18:03
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 11 años, 9 meses
Puntos: 1
Exclamación Respuesta: como insertar registros en masa

bueno su idea es buena pero el valor del input tipo text no lo envía y el del hidden si como hago gracias por su ayuda este es el código completo que estoy usando

Código PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>
<?php 
$conexA
mysql_connect("localhost","root","malu1101")//conexión al servidor 
    
or die("No se pudo realizar la conexion"); 
$conexB=mysql_select_db("pruebas",$conexA)//elegir la base de datos 
    
or die("ERROR con la base de datos");
    
if(isset(
$_POST['a'])){    
$a=$_POST['a'];

$consulta="SELECT* FROM alumnos WHERE grado='".$a."'";
$resultado=mysql_query($consulta,$conexA);
 
echo 
'<table border="1">';
echo 
'<tr>';
echo 
'<th>'.'nombres'.'</th>';
echo 
'<th>'.'grado'.'</th>';
echo 
'<th>'.'Nota'.'</th>';
echo 
'<tr>';

while(
$fila=mysql_fetch_array($resultado))
{
echo 
'</tr>';
echo 
'<th>'.$fila['nombres'].'</th>';
echo 
'<th>'.$fila['grado'].'</th>';
echo 
'<form action="ingresar.php" method="post">';
echo 
'<td>'.'<input type="text" name="nota" />'.'</td>';
echo 
'<input type="hidden" name="id_estu" value="'.$fila['id'].'" />';

echo 
'</th>';
echo 
'<th>';
echo 
'</tr>';
}
echo 
'<input type="submit" value="aceptar"/>';
echo 
'</form>';
echo 
'</table>';
}
?>

<body>
<form action="alumconsul.php" method="post">
grado
<input type="text" name="a"/>
<input type="submit" value="enviar"/>
</form>
</body>
</html>
__________________
Luis Alfonso Cruz Valbuena
[email protected]
  #7 (permalink)  
Antiguo 16/07/2012, 19:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: como insertar registros en masa

Lo que tienes que lograr construir es una sentencia INSERT que tenga esta forma:
Código MySQL:
Ver original
  1. INSERT INTO tabla(campos...)
  2.     (lista de valores...),
  3.     (lista de valores...),
  4.     (lista de valores...),
  5.     (lista de valores...),
  6.     (lista de valores...),
  7.     (lista de valores...),
  8.     (lista de valores...),
  9.     (lista de valores...),
  10.      ...;
Esta sentencia puede encadenar sin problemas 10, 100, ó 500 bloques de datos antes de enviarse a ejecutar.
Lamentablemente los únicos ejemplos que tengo en este momento de cómo construir dinámicamente este tipo de consulta son para VB.NET, y no para PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 16/07/2012, 19:46
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 11 años, 9 meses
Puntos: 1
Exclamación Respuesta: como insertar registros en masa

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Lo que tienes que lograr construir es una sentencia INSERT que tenga esta forma:
Código MySQL:
Ver original
  1. INSERT INTO tabla(campos...)
  2.     (lista de valores...),
  3.     (lista de valores...),
  4.     (lista de valores...),
  5.     (lista de valores...),
  6.     (lista de valores...),
  7.     (lista de valores...),
  8.     (lista de valores...),
  9.     (lista de valores...),
  10.      ...;
Esta sentencia puede encadenar sin problemas 10, 100, ó 500 bloques de datos antes de enviarse a ejecutar.
Lamentablemente los únicos ejemplos que tengo en este momento de cómo construir dinámicamente este tipo de consulta son para VB.NET, y no para PHP.
gracias hombre por su apoyo.
no entiendo o mas bien no se como llegar a lo que me dices pero muchas gracias
__________________
Luis Alfonso Cruz Valbuena
[email protected]
  #9 (permalink)  
Antiguo 16/07/2012, 20:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: como insertar registros en masa

Cita:
no entiendo o mas bien no se como llegar a lo que me dices
Veamos si esto te puede servir de guía (encontrado tras 35 segundos de búsquedas en en Google):
Código PHP:
Ver original
  1. <?php
  2. $multi = array(
  3.                 array("First", "Content"), //Array for a row of fields
  4.                 array("Second", "Something"),
  5.                 array("Third", "Some Text"),
  6.                 array("Another", "Another Content")
  7.             );
  8. $new = array();
  9. foreach($multi as $key=>$value) {
  10.     $new[] = "'".implode("', '", $value)."'";
  11. }
  12. $query = "(".implode("), (", $new).")";
  13. mysql_query("INSERT INTO duplicate (title, body) VALUES ".$query.";");
  14. echo "Inserted successfully";
  15. ?>


O bien esta otra forma (40 segundos después):
Código PHP:
Ver original
  1. $insertOrUpdateStatement1 = "INSERT INTO table (col1, col2) VALUES ";
  2. $insertOrUpdateStatement2 = "ON DUPLICATE KEY UPDATE ";
  3. $counter = 0;
  4. $queries = array();
  5.  
  6. foreach($itemList as $key => $item){
  7.     $val1 = escape($item->col1); //escape is a function that will make
  8.                                  //the input safe from SQL injection.
  9.                                  //Depends on how are you accessing the DB
  10.  
  11.     $val2 = escape($item->col2);
  12.  
  13.     $queries[] = $insertOrUpdateStatement1.
  14.     "('$val1','$val2')".$insertOrUpdateStatement2.
  15.     "col1 = '$val1', col2 = '$val2'";
  16.  
  17.     $counter++;
  18.  
  19.     if ($counter % 100 == 0) {
  20.         executeQueries($queries);
  21.         $queries = array();
  22.         $counter = 0;
  23.     }
  24. }
  25.  
  26. //executeQueries toma el array y envía una sola query multiple:
  27.  
  28. function executeQueries($queries) {
  29.    $data = "";
  30.      foreach ($queries as $query) {
  31.         $data.=$query.";\n";
  32.     }
  33.     executeQuery($data);
  34. }

Yo me quedo con la primera, porque es más simple de código, pero cualquier otra forma puede ser usable.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 17/07/2012, 08:07
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 10 meses
Puntos: 55
Respuesta: como insertar registros en masa

aqui tienes un ejemplo sencillo


el formulario
Código PHP:
Ver original
  1. <?php
  2. //aqui se realiza la consulta y luego se cuenta
  3. $cuenta = 5; //este numero es como que fuera el resultado de la consulta al contarla
  4.  
  5. $i=1; //aqui se crea desde el 1 para hacer el while
  6. ?>
  7. <form name="form1" method="post" action="insertar_dinamica2.php">
  8.  
  9. <table width="200" border="1">
  10. <?php
  11. while($cuenta >= $i) {
  12. ?>  
  13.     <tr>
  14.       <td>
  15.   <label>
  16.     <input name="nota<?php echo $i; ?>" type="text" id="nota" size="2" maxlength="2">
  17.   </label>
  18.       </td>
  19.     </tr>
  20.  
  21.   <?php $i++; } ?>
  22.       <tr>
  23.       <td>
  24.       <input type="hidden" value="<?php echo $cuenta; ?>" name="cuenta" id="cuenta">
  25.       <label>
  26.         <input type="submit" name="ENVIAR" id="ENVIAR" value="Enviar">
  27.       </label></td>
  28.     </tr>  
  29. </table>
  30. </form>


y como se recibe

Código PHP:
Ver original
  1. <?php
  2.  
  3. $cuenta = $_POST['cuenta'];
  4. $i=1;
  5. while($cuenta >= $i) {
  6.  
  7.     echo $_POST['nota'.$i];
  8.     echo '<br>';
  9.    
  10.     $i++;
  11. }
  12. ?>
__________________
<?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?>
...Error en linea: 1 o.O
  #11 (permalink)  
Antiguo 17/07/2012, 11:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: como insertar registros en masa

Cita:
Iniciado por johhan16 Ver Mensaje
aqui tienes un ejemplo sencillo
Creo que hay un error de interpretación: LO que pregunta es cómo crear inserts masivos a la base de datos, no a un formulario...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 17/07/2012, 14:23
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 10 meses
Puntos: 55
Respuesta: como insertar registros en masa

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Creo que hay un error de interpretación: LO que pregunta es cómo crear inserts masivos a la base de datos, no a un formulario...


yo lo entiendo de esta forma

partiendo de un formulario dinamico que puede tener X cantidad de alumnos a los cuales quiere colocarle la nota

como hacer para insertar en la BD los registros de los X cantidad de alumnos??

donde X puede variar indefinidamente
__________________
<?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?>
...Error en linea: 1 o.O
  #13 (permalink)  
Antiguo 17/07/2012, 14:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: como insertar registros en masa

Es un problema de creación dinámica del INSERT. El cómo se carguen inicialmente esos datos es medio irrelevante, porque se parte del momento en que los datos están listos para ser enviados a la base.
La cosa es combinar los recursos de ambos lenguajes, pero no te olvides que una carga masiva no significa N INSERTs individuales, sino una X cantidad de INSERTs, cada uno de los cuales inserta en la base N registros.
Hay dos formas esenciales en MySQL: LOAD DATA, que requiere permisos de FILE y acceso al servidor, y INSERT de múltiples bloques, que es lo que propongo. Esto último no requiere permisos especiales.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 17/07/2012 a las 20:06
  #14 (permalink)  
Antiguo 18/07/2012, 07:59
Avatar de trofserpiente  
Fecha de Ingreso: julio-2012
Ubicación: Lerida
Mensajes: 220
Antigüedad: 11 años, 9 meses
Puntos: 1
Exclamación Respuesta: como insertar registros en masa

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Creo que hay un error de interpretación: LO que pregunta es cómo crear inserts masivos a la base de datos, no a un formulario...

muchas gracias tiene toda la razón el tema era para insertar pero creo que mi problema viene desde las raíces ya que nos se como enviar la información para un INSERT de múltiples bloques,por que de la forma que lo estoy intentando apoyándome con la ayuda de johhan16 para poder llegar a a su ayuda gnzsoloyo

ojala me puedan echar una mano es que soy un poco lento y para empeorar hasta a hora estoy empezando en este mundo
__________________
Luis Alfonso Cruz Valbuena
[email protected]

Etiquetas: registro, registros, sql, tabla
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 00:54.