Foros del Web » Programando para Internet » PHP »

Insert Into dentro de foreach repite filas

Estas en el tema de Insert Into dentro de foreach repite filas en el foro de PHP en Foros del Web. Hola a todos... Estoy haciendo un "insert into" dentro de un foreach con datos de un archivo.txt de la siguiente manera: Código PHP: $lineas  =  ...
  #1 (permalink)  
Antiguo 03/09/2017, 07:15
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 2 meses
Puntos: 3
Insert Into dentro de foreach repite filas

Hola a todos...

Estoy haciendo un "insert into" dentro de un foreach con datos de un archivo.txt de la siguiente manera:

Código PHP:
$lineas file('archivo.txt');

foreach (
$lineas as $linea_num => $linea)
{
    
//los datos en el archivo.txt están separados por barra "|" vertical
    
$datos explode("|",$linea);
    
    
$valor_1 $datos[0];
    
$valor_2 $datos[1];
    
$valor_3 $datos[2];
    
    
//INSERT INTO
    
$guardar mysqli_query($con,"INSERT INTO nombre_tabla (id, campo_1, campo_2, campo_3)
    VALUES(NULL, '$valor_1', '$valor_2', '$valor_3')"
);

Pero al insertar los registros en la tabla, guarda una fila demás...

Por favor, ¿alguien tiene alguna idea de porque me ocurre esto, y cómo solucionarlo?... he hecho varios intentos y búsquedas pero no doy con la solución.
  #2 (permalink)  
Antiguo 03/09/2017, 16:27
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 2 meses
Puntos: 3
Respuesta: Insert Into dentro de foreach repite filas

Bien, me explico mejor y pongo como la solución que le di:

Al imprimir los array, y suponiendo que en el archivo.txt hay una sola fila, se imprimía esto:

Código PHP:
print_r($datos);

Array ( [
0] => valor [1] => valor [2] => valor )
Array ( [
0] => ) 
Como se ve, el "foreach" me estaba dando un array demás, y ese array demás se insertaba en la tabla mysql.

Lo solucione con un "if()":

Código PHP:
$lineas file('archivo.txt');

foreach (
$lineas as $linea_num => $linea)
{
    
//los datos en el archivo.txt están separados por barra "|" vertical
    
$datos explode("|",$linea);
    
    if(
$datos[0] > '0'){ //if que solociona el array repetido
    
    
$valor_1 $datos[0];
    
$valor_2 $datos[1];
    
$valor_3 $datos[2];
    
    
//INSERT INTO
    
$guardar mysqli_query($con,"INSERT INTO nombre_tabla (id, campo_1, campo_2, campo_3)
    VALUES(NULL, '$valor_1', '$valor_2', '$valor_3')"
);
    
    }
//fin del if
}//fin del foreach 
Lo solucione pero no se si es lo correcto!!!

Saludos!
  #3 (permalink)  
Antiguo 04/09/2017, 09:26
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Insert Into dentro de foreach repite filas

Eso es porque tienes un salto de linea, justo al final, por ejemplo este seria tu txt:

"dato1.1|dato1.2|dato1.3
dato2.1|dato2.2|dato2.3
dato3.1|dato3.2|dato3.3
"

Siendo que deberia ser asi

"dato1.1|dato1.2|dato1.3
dato2.1|dato2.2|dato2.3
dato3.1|dato3.2|dato3.3"

La que hiciste tu, solo que ese $datos[0] no es igual a 0 si no que es nulo o vacio. tu en una linea podrias tener algo asi

|datoN.2|datoN.3

Y en ese cado datos[0] tambien esta vacio pero la linea esta llena, es mas puede pasar que tengas esto "||" que en ese caso todos estarian vacios, Y ES MAS incluso que una linea tenga esto "|" o simplemente que tengas una linea vacia dentro del texto. entonces lo mejor es validar

Código PHP:
Ver original
  1. if(sizeof($datos) == 3){
  2.     $passthru = true;
  3.     for($k=0;$k<sizeof($datos);$k++){
  4.         if(empty($datos[$k])){
  5.         $passthru = false;
  6.         break;
  7.         }
  8.     }
  9.  
  10.     if($passthru){
  11.     //insert
  12.     }
  13. }

Siempre es bueno validar todo.
  #4 (permalink)  
Antiguo 06/09/2017, 08:03
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 2 meses
Puntos: 3
Respuesta: Insert Into dentro de foreach repite filas

Hola alvaro_trewhela... gracias por la enseñanza!!!

He visto en el manual que sizeof() es un alias de count().

Al preguntar si "sizeof($datos) == 3)", estás preguntando si la cantidad de campos es igual a 3, ¿verdad?

Desconocía toda esta comprobación, pero iré viendo más información para aprender!!!

Gracias nuevamente y saludos!!!
  #5 (permalink)  
Antiguo 06/09/2017, 20:03
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Insert Into dentro de foreach repite filas

Si es alias. a mi me gusta mas sizeof que count. Sizeof en ingles es tamaño de. Y count es contar. Al programr mi cabeza se transforma al ingles por eso uso funciones y variables en ingles y a mi me hace mas sentido sizeof que count.

Si sizeof ==3 es para saber eso mismo. Es bueno siempre ser meticuloso con las validaciones cuando el programa o script depende de un recurso externo es bueno validar todo asi te ahorras que se produscan un bugs

Saludos

Etiquetas: filas, foreach, insert, mysql, nombre, repite, 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 04:48.