Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1132 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Probleme import csv dans une base de donnée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme import csv dans une base de donnée

n°2200288
VSV-M
PSN : Luluberlu
Posté le 19-08-2013 à 13:52:15  profilanswer
 

Bonjour à tous,  
 
J'ai créé une interface php afin de permettre l'import dans une base de données le contenu d'un fichier CSV légèrement modifié
Il semble cenpendant que ca ne marche pas correctement Avec mon code j'ai un bug qui créé des centaines milliers de champs vides dans ma db.
dans les csv, les colonnes sont délimitées par le symbole "|". La raison est que dans les strings que je dois insérer dans la base, il y a beaucoup de caractères spéciaux : "; , /".
 
voici le code que j'ai écris en regardant à droite à gauche sur le net ( je suis complètement débutant autodidacte) :  

Code :
  1. $fichier = fopen("upload/".$_FILES['csv']['name'], "r" );
  2.   //efface toute les données précédentes
  3.    $sql1 ="DELETE FROM personnaldb";
  4.      $req1=mysql_query($sql1)or die (mysql_error());
  5. while (!feof($fichier))
  6. {
  7. // On recupere toute la ligne
  8. $uneLigne = addslashes(fgets($fichier));
  9. //On met dans un tableau les differentes valeurs trouvés (ici séparées par un '|')
  10. $tableauValeurs = explode('|', $uneLigne);
  11.    $sql = "INSERT INTO db (champ1, champ2, champ3, champ4, champ5, champ6, champ7, champ8, champ9)
  12. VALUES
  13. ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."', '".$tableauValeurs[4]."', '".$tableauValeurs[5]."', '".$tableauValeurs[6]."', '".$tableauValeurs[7]."','".$tableauValeurs[8]."')";


 
Je pense que le problème viens d'un boucle tournant à l'infini ( probleme avec la fonction addslashes ?).
 
 
Merci pour votre aide  :jap:


---------------
PSN : Luluberlu
mood
Publicité
Posté le 19-08-2013 à 13:52:15  profilanswer
 

n°2200290
sltpaulo
Posté le 19-08-2013 à 14:09:23  profilanswer
 

Voila comment je ferai le feed de ta bd :

 
Code :
  1. $fichier = fopen("upload/".$_FILES['csv']['name'], "r" );
  2.       //efface toute les données précédentes
  3.        $sql1 ="DELETE FROM personnaldb";
  4.          $req1=mysql_query($sql1)or die (mysql_error());
  5.     while (!feof($fichier))
  6.     {
  7.     // On recupere toute la ligne
  8. $tmp = array();
  9. foreach(fgetcsv($fichier,1000,'|') as $key => $value){
  10.       $tmp[$key] =  mysql_real_escape_string($value,$bdd);
  11. }
  12.        $sql = "INSERT INTO db (champ1, champ2, champ3, champ4, champ5, champ6, champ7, champ8, champ9)
  13.     VALUES
  14.     ('".implode("','",$tmp)."')";
 

Voila avec $link ta connexion à la base de données


Message édité par sltpaulo le 19-08-2013 à 14:10:33
n°2200291
VSV-M
PSN : Luluberlu
Posté le 19-08-2013 à 14:17:21  profilanswer
 

Merci pour la réponse, je teste ca dès que possible.

 

Par contre penses tu savoir d où viens le problème (histoire que je comprenne ) :)

 

Et d où viens le 1000 dans le fgetcsv ?


Message édité par VSV-M le 19-08-2013 à 14:23:17

---------------
PSN : Luluberlu
n°2200292
sltpaulo
Posté le 19-08-2013 à 14:40:27  profilanswer
 

Pour le 1000, c'est arbitraire, lit la desc sur le man mais le à 0 si tu veux mais c'est pour la perf.
 
Ton erreur vient d'un mauvais "encodage" de tes caractères. Tu devrais également vérifier le charset de ta bdd, perso je prends utf8 - general-ci (du moins je pense que faire le addslash sur toute la ligne n'est pas une bonne idée mais plutot de le faire sur chaque valeur, après je ne code pas comme ça pour les fichiers csv donc :s je peux pas t'aider plus)


Message édité par sltpaulo le 19-08-2013 à 14:42:28
n°2200293
VSV-M
PSN : Luluberlu
Posté le 19-08-2013 à 14:49:45  profilanswer
 

Merci !
 
Pour le moment, j'ai bêtement remplacé mon code par le tiens, et ca ne marche pas... je n'ai probablement pas compris ce que tu as voulu dire par $link.
Je suis bien en UTF8-ci dans la base de donné.
 
Je continu de chercher !  :)


---------------
PSN : Luluberlu
n°2200295
sltpaulo
Posté le 19-08-2013 à 15:09:12  profilanswer
 

par exemple :

Code :
  1. $link = mysql_connect($db_array["host"], $db_array["base"], $db_array["pwd"]) or die(mysql_error());
 

je te conseille aussi d'écrire tes exécutions sql comme ça :

Code :
  1. $req1=mysql_query($sql1,$link)or die (mysql_error());



Message édité par sltpaulo le 19-08-2013 à 15:10:13
n°2200297
VSV-M
PSN : Luluberlu
Posté le 19-08-2013 à 15:20:50  profilanswer
 

OK, je comprends... en fait je me connecte autrement à la base de donnée, mais merci du conseil...
 
Par contre impossible de faire marcher ton code :/. Ca me renvoie une page inexistante, comme si le fichier php était non interprétable.
je pense que ca viens du  

Code :
  1. ysql_real_escape_string($value,$bdd);

où $bdd n'est pas définis avant.
 je fouille :)


---------------
PSN : Luluberlu
n°2200299
sltpaulo
Posté le 19-08-2013 à 15:24:42  profilanswer
 

Hmmm, regarde la doc des fonctions qui te pose problème, la $bdd = $link,
 
le lien de connexion que tu crées avec mysql_connect

n°2200300
VSV-M
PSN : Luluberlu
Posté le 19-08-2013 à 15:29:59  profilanswer
 

c'est ce que je fais, merci !


---------------
PSN : Luluberlu

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Probleme import csv dans une base de donnée

 

Sujets relatifs
probleme php raiderprobleme sur moteur de recherche sur page HTML
Problème de code Wordpress, le design fait des siennes![PHP] Problème de chemin relatif
Problème Onmouseoverproblème avec article dans la page membre
Probleme JAVA en ligne de commandeEXCEL 2010 PROBLEME DE PROGRAMATION BDCDE
[ACCESS] Problème infinité des même résultats d'une Requêtes 
Plus de sujets relatifs à : Probleme import csv dans une base de donnée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR