Foros del Web » Programando para Internet » PHP »

bucle que si existe registro no lo inserte y pase al siguiente

Estas en el tema de bucle que si existe registro no lo inserte y pase al siguiente en el foro de PHP en Foros del Web. Hola: mi consulta es como puedo hacer dentro de un bucle, si existe el registro en la bdd O viene mal formateado, este no lo ...
  #1 (permalink)  
Antiguo 25/11/2009, 06:32
 
Fecha de Ingreso: abril-2006
Mensajes: 240
Antigüedad: 18 años
Puntos: 1
bucle que si existe registro no lo inserte y pase al siguiente

Hola: mi consulta es como puedo hacer dentro de un bucle, si existe el registro en la bdd O viene mal formateado, este no lo inserte y pase al siguiente, y de lo contrario lo inserte.

al finalizar, mostrar el total de insertados y no insertados.
lo primero que hago es cargar el csv en una tabla temporal
Código PHP:
$fp fopen ($tmpdestino,"r");
$sql "CREATE TEMPORARY TABLE T_TEMPUF (fecha DATE NOT NULL, uf DOUBLE NOT NULL)" ;
        
mysql_query($sql);

while (
$data fgetcsv ($fp1000";"))
            {
                
$num count ($data);
                
$tmpfecha     VechaUsuario($data[0]);
                
$tmpanio     substr($tmpfecha,0,4);
                
$tmpmes     substr($tmpfecha,4,2);
                
$tmpdia     substr($tmpfecha,6,2);
                if(!
checkdate($tmpmes,$tmpdia,$tmpanio))
                    {
                        
$msg.='FORMATO DE FECHA INCORRECTO, DEBE SER DD/MM/AAAA<br />';
                    }
                
$tmpmonto    $data[1];
                if (!
is_numeric('0'.$tmpmonto))
                    {
                        
$msg.='MONTO UF NO ES NUMERICO<br />');
                    }
                
$insertar "INSERT INTO T_TEMPUF (fecha,uf) VALUES ('".$tmpfecha."','".$tmpmonto."')";
                
mysql_query($insertar);
        
            }
        
fclose ($fp); 
despues de insertar en la temporal grabo en la tabla
Código PHP:
$tmpcuenta 0;
        
$sql1 "SELECT fecha,uf FROM T_TEMPUF ";
        
$sql1 mysql_query($sql1);
        if ( 
mysql_num_rows($sql1) > 0
            {
                while (
$row mysql_fetch_array($sql1))
                    {
                        
$sql "SELECT * FROM T_MONEDA WHERE FECHA = '".VechaUsuario(VechaUsuario2($row[0]))."'";
                        
$sql mysql_query($sql);
                        if (
mysql_num_rows($sql) == 0
                            {
                                
                                
$insertar "INSERT INTO T_MONEDA (FECHA,MONTOUF) ";
                                
$insertar $insertar."VALUES('".VechaUsuario(VechaUsuario2($row[0]))."','".$row[1]."')";
                                
mysql_query($insertar);
                            }
                    }
            } 
pero solo inserta, y si falla no manda ningun error

de antemanos gracias
  #2 (permalink)  
Antiguo 25/11/2009, 11:41
serser
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: bucle que si existe registro no lo inserte y pase al siguiente

Hola climax2006.

Siempre inserta porque no tienes ninguna condición que diga que si hay algún error no inserte, es decir, según tu código tienes dos condiciones de error que lo único que hacen es concatenar un cadena de caracteres a la variable $msg (no muestran nada por pantalla...). Entonces da igual que sean verdaderas o falsas; el código siempre llegará a las dos últimas líneas de la condición while.

Deberías utilizar, por ejemplo, una variable para poder manejar esto, algo así:
Código PHP:
...
while (...)
{
     
$error false
     
...
     if (...) { 
        ...
        
$error true;
     } 
     ...
     if (...) { 
        ...
        
$error true;
     } 
     if (!
$error) {
        
$insertar "INSERT INTO..."
        
....
     }
         

... 
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 13:02.