Foros del Web » Programando para Internet » PHP »

INSERT INTO varias filas a la vez

Estas en el tema de INSERT INTO varias filas a la vez en el foro de PHP en Foros del Web. Para inseretar en mi base de datos tengo asi. La idea es insertar 20 registros o filas a la vez Código PHP: $turno  =  $_POST ...
  #1 (permalink)  
Antiguo 29/06/2011, 04:13
 
Fecha de Ingreso: junio-2011
Mensajes: 19
Antigüedad: 12 años, 10 meses
Puntos: 0
Pregunta INSERT INTO varias filas a la vez

Para inseretar en mi base de datos tengo asi.
La idea es insertar 20 registros o filas a la vez
Código PHP:
$turno $_POST["turno"];
$agente $_POST["agente"];
(
"INSERT INTO horarios (turno, agente) VALUES ('$turno,'$agente')"
Formulario tengo asi:
Código PHP:
<form action="" method="post" name="formulario">
<?php $i  1
do {  
$i ++;?>//Repetir filas en el formulario

<select name="agente">//Traigo de otra tabla de la DB
        <?php do {  ?>
        <option value="<?php echo $row_agente['id']?>" ><?php echo $row_agente['nombre']?></option>
        <?php } while ($row_agente mysql_fetch_assoc($agente)); ?>
</select>

<select name="turno">
        <option value="mañana" >mañana</option>
        <option value="tarde" >tarde</option>
        <option value="noche" >noche</option>

</select>
<?php } while ($i 20?>//FIN Repetir filas en el formulario
</form>
Con el $i++ me crea una lista de 20 campos a enviar "agente" y "turno".
1 - El problema es que luego de mysql_fetch_assoc($agente) los 19 campos de abajo estan en Blanco. en mi formulario.
2 - Supungamos que logremos mostrar los campos agentes, ¿como insertar los 20 en mi DB de un solo envio?

Gracias por su ayuda
  #2 (permalink)  
Antiguo 29/06/2011, 06:46
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: INSERT INTO varias filas a la vez

Veamos....


El primer "problema" que tienes es el formulario.

Si tu le dices que hay 20 campos con el nombre "agente". Luego... ¿cómo pillas 20 resultados? Se sobreescribirian, y sólo te quedaria el último (o el primero, no sé xD) !

Así pues, el bucle lo podrías hacer así:
Código PHP:
<?php $i  0
do {  
$i ++;?>//Repetir filas en el formulario

<select name="agente<?php echo $i ?>">//Traigo de otra tabla de la DB
        <?php do {  ?>
        <option value="<?php echo $row_agente['id']?>" ><?php echo $row_agente['nombre']?></option>
        <?php } while ($row_agente mysql_fetch_assoc($agente)); ?>
</select>

<select name="turno<?php echo $i ?>">
        <option value="mañana" >mañana</option>
        <option value="tarde" >tarde</option>
        <option value="noche" >noche</option>

</select>
<?php } while ($i 20); ?>//FIN Repetir filas en el formulario
Así, por ejemplo, tendrías 20 registros, nombrados desde agente1 agente2 agente3... etc, hasta agente20.

A la hora de recoger las variables, sería con $_POST['agente1'] o $_POST['agente5'] etc.... y cada uno con su $_POST['turno1'] o $_POST['turno5'].

Así pues, tienes dos posibilidades:
·Hacer un query por insercion:
Código PHP:
$i 0;
do {
    
$i++;
    
$turno $_POST['turno'.$i];
    
$agente $_POST['agente'.$i];
    
mysql_query("INSERT INTO horarios (turno, agente) VALUES ('$turno','$agente')");
    } while( 
$i 20); 
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
· Hacer un query con todas las inserciones
Código PHP:
$i 0;
$value '';
do {
   
$i++;
   
$turno $_POST['turno'.$i];
   
$agente $_POST['agente'.$i];
   if(
$value == '')  $value "VALUES('$turno','$agente')";
   else 
$value .= "VALUES('$turno','$agente')";
   } while(
$i 20);
mysql_query("INSERT INTO horarios (turno, agente) ".$value); 

Cada línea de código tiene su propósito (y lo estoy haciendo de cabeza, asiq puede q tb su fallo!). Si no entiendes alguna cosa, piénsa pq está así, y si no se te ocurre el pq hago esto así o asá, pregunta! Si veo la pregunta, te contestaré!

PD: Pero, sobretodo, ten en cuenta que esto no es para que copies&pegues, es para que veas cómo se puede solucionar, hay 1000 formas de hacer las cosas ^^
  #3 (permalink)  
Antiguo 29/06/2011, 06:54
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: INSERT INTO varias filas a la vez

Código PHP:
Ver original
  1. <form action="" method="post" name="formulario">
  2. <?php $i  = 1;
  3. do {  $i ++;?>//Repetir filas en el formulario
  4.  
  5. <select name="agente_<?php echo $i; ?>">//Traigo de otra tabla de la DB
  6.         <?php do {  ?>
  7.         <option value="<?php echo $row_agente['id']?>" ><?php echo $row_agente['nombre']?></option>
  8.         <?php } while ($row_agente = mysql_fetch_assoc($agente)); ?>
  9. </select>
  10.  
  11. <select name="turno_<?php echo $i; ?>">
  12.         <option value="mañana" >mañana</option>
  13.         <option value="tarde" >tarde</option>
  14.         <option value="noche" >noche</option>
  15.  
  16. </select>
  17. <?php } while ($i < 20; ?>//FIN Repetir filas en el formulario
  18. </form>

en la pagina que procesa hace esto:

Código PHP:
Ver original
  1. echo '<pre>';
  2. var_dump($_REQUEST);
  3. echo '<pre>';

y mostranos el resultado
  #4 (permalink)  
Antiguo 29/06/2011, 06:58
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: INSERT INTO varias filas a la vez

Vaya, no me deja editar :(


Fe de erratas:

Donde digo
Código PHP:
else $value .= "VALUES('$turno','$agente')"
Deberia decir:
Código PHP:
else $value .= ",('$turno','$agente')"
Fin fe de erratas :)
  #5 (permalink)  
Antiguo 29/06/2011, 10:55
 
Fecha de Ingreso: junio-2011
Mensajes: 19
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: INSERT INTO varias filas a la vez

Cita:
Iniciado por Eleazan Ver Mensaje
Veamos....


El primer "problema" que tienes es el formulario.

Si tu le dices que hay 20 campos con el nombre "agente". Luego... ¿cómo pillas 20 resultados? Se sobreescribirian, y sólo te quedaria el último (o el primero, no sé xD) !

Así pues, el bucle lo podrías hacer así:
Código PHP:
<?php $i  0
do {  
$i ++;?>//Repetir filas en el formulario

<select name="agente<?php echo $i ?>">//Traigo de otra tabla de la DB
        <?php do {  ?>
        <option value="<?php echo $row_agente['id']?>" ><?php echo $row_agente['nombre']?></option>
        <?php } while ($row_agente mysql_fetch_assoc($agente)); ?>
</select>

<select name="turno<?php echo $i ?>">
        <option value="mañana" >mañana</option>
        <option value="tarde" >tarde</option>
        <option value="noche" >noche</option>

</select>
<?php } while ($i 20); ?>//FIN Repetir filas en el formulario
Así, por ejemplo, tendrías 20 registros, nombrados desde agente1 agente2 agente3... etc, hasta agente20.

A la hora de recoger las variables, sería con $_POST['agente1'] o $_POST['agente5'] etc.... y cada uno con su $_POST['turno1'] o $_POST['turno5'].

Así pues, tienes dos posibilidades:
·Hacer un query por insercion:
Código PHP:
$i 0;
do {
    
$i++;
    
$turno $_POST['turno'.$i];
    
$agente $_POST['agente'.$i];
    
mysql_query("INSERT INTO horarios (turno, agente) VALUES ('$turno','$agente')");
    } while( 
$i 20); 
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
· Hacer un query con todas las inserciones
Código PHP:
$i 0;
$value '';
do {
   
$i++;
   
$turno $_POST['turno'.$i];
   
$agente $_POST['agente'.$i];
   if(
$value == '')  $value "VALUES('$turno','$agente')";
   else 
$value .= "VALUES('$turno','$agente')";
   } while(
$i 20);
mysql_query("INSERT INTO horarios (turno, agente) ".$value); 

Cada línea de código tiene su propósito (y lo estoy haciendo de cabeza, asiq puede q tb su fallo!). Si no entiendes alguna cosa, piénsa pq está así, y si no se te ocurre el pq hago esto así o asá, pregunta! Si veo la pregunta, te contestaré!

PD: Pero, sobretodo, ten en cuenta que esto no es para que copies&pegues, es para que veas cómo se puede solucionar, hay 1000 formas de hacer las cosas ^^
Gracias por tu respuesta, creo que abre luces para hacer algo, ehm, los campos "agentes" solo aparece en el 1er campo del formulario, no se parece que despues del $row_agente = mysql_fetch_assoc($agente) el $row_agente['nombre'] ya no funciona, tira todo vacio

Etiquetas: insert, mysql, mysql_fetch_assoc
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 23:24.