Ver Mensaje Individual
  #4 (permalink)  
Antiguo 13/09/2011, 07:53
Avatar de Raziel_Ravenheart
Raziel_Ravenheart
 
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: Importar datos a tabla sin duplicar y quitar espacios vacíos

Bueno voy a tratar de responderte, por que aunque se algo sobre PHP, espero que mi lógica pueda ser compatible con tu código. ... xD. Te lo describiré por pasos:

1. creas una variable array, para guardar un identificador de los datos que no quieres que se dupliquen.

2. Una vez extraes el dato del archivo CSV, utilizas la función str_replace, para quitar los espacios en blanco de cada dato en el array $data

3. Una vez sin espacios blancos, comparas el dato identificador del registro actual que tienes en $data, con los datos guardados en el primer array

4. Si el dato no existe, lo guardas en el array y procedes a imprimirlo con el echo y a guardarlo en la base de datos. Es seguro que imprimes la línea con el echo solo por depuración, pero te recomiendo utilizar un debugger para esto, si no es así, no importa, de todos modos con el echo, sabes que datos se estan guardando.

El código sería algo como el siguiente, si algo no te funciona, solo me avisas, ya que lo estoy haciendo sin interprete de php, mirando solo el manual en línea y con base en tu código:

Código PHP:
Ver original
  1. <?php
  2. /* Cuando el archivo contiene solo script de php, se recomienda utilizar solo la
  3. etiqueta de apertura completa */
  4.  
  5. include('conectar.php');
  6.  
  7. $row = 1;
  8.  
  9. /* Declaramos e inicializamos el array para guardar los ids.
  10. Práctica totalmente recomendada para evitar que se filtren datos basura
  11. Uno nunca sabe */
  12. $ids = array();
  13.  
  14.  
  15. $fp = fopen ('lista.csv','r');
  16. while ($data = fgetcsv ($fp, 1000, ";"))
  17. {
  18.     /* Supongo que la variable $num la sacaste del ejemplo, por que no veo que la uses acá
  19.     si no la necesitas para algo, puedes eliminarla */
  20.     $num = count ($data);
  21.    
  22.     echo "$row- ".$data[0].$data[1].$data[2].$data[3].$data[4].$data[5].$data[6].$data[7];
  23.     print " <br>";
  24.     $row++;
  25.    
  26.     // Ahora revisamos todos los campos de $data y les quitamos los espacios en blanco
  27.     foreach ($data as $pos=>$dato) {
  28.         $data[$pos] = str_replace(" ","",$dato);
  29.     }
  30.  
  31.     /*Una vez removidos todos los espacios en blanco, pasamos a buscar si el dato
  32.     identificador ya existe en el array $ids, si ya existe, no lo procesamos, suponiendo que
  33.     el dato identificador es $data[0] */
  34.  
  35.     // Como esta función devuelve true, si el valor existe en el array, necesitamos que el
  36.     // valor retornado sea igual a false, por que esto significa que el dato no existe y podemos
  37.     // guardarlo en la base de datos, por eso pongo el ! antes de la función
  38.     if (!in_array($data[0],$ids)) {
  39.     // !in_array($data[0],$ids) es lo mismo que in_array($data[0],$ids) == false
  40.        
  41.         // Guardamos el dato identificador en el array y procedemos con el resto
  42.        $ids[] = $data[0];
  43.         $insertar="INSERT INTO producto (id_articulo,cod_categoria,categoria,cod_linea,linea,descripcion,precio,unidad) VALUES ('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]')";
  44.         mysql_query($insertar);
  45.     }
  46. }
  47. fclose ($fp);
  48.  
  49. //no utilizamos la etiqueta de cierre '?>' si el archivo solo contiene script php

Listo, así es como yo lo haría, intenta probarlo y cualquier cosa que no entiendas avisas. Aquí están los links de las funciones

http://php.net/manual/es/function.str-replace.php
http://co.php.net/manual/es/function.in-array.php

Exitos