traitement de fichier csv avec php

Répondre
celia
celia
Déconnecté
Bonjour à tous!
J'ai un souci, aufait je recupere via un formulaire html un fichier csv de 5 colonnes sépareés par des virgule.

Le téléchargement du fichier se passe bien.J'ai mis en place la function ajouter_matrice() qui me permet de recuperer les données du fichier csv telechargées.
Je recupere toutes les données du fichier dans un tableau $les_var.

J'ai du mal à partir de $les_var à recuperer les données d'une ligne du fichier csv pour inserer ensuite dans ma base.

Merci à ceux qui peuvent m'aider.

  1. <?php
  2. function ajouter_matrice($file) { 
  3.             $les_var = array(); 
  4.             $row = 1; // initialisation de la 1ère ligne
  5.             $fp = fopen ($file,"r"); // ouverture du fichier en lecture seule
  6.                while ($data = fgetcsv ($fp, 1000, ";")) // 1 ligne = au maximum 1000 car. avec séparateur = ;
  7.                { 
  8.                   $num = count ($data); 
  9.                   print "<p> Insertion de la ligne n°".$row." du fichier csv : \n"; 
  10.                   $row++; 
  11.                   for ($i=0; $i < $num; $i++){ 
  12.                      list($no_site, $no_band, $distance, $taille,$intensite) = explode(",", $data[$i]); 
  13.                      array_push($les_var,$no_site, $no_band, $distance, $taille,$intensite); 
  14.                   }            
  15.                } 
  16.                return $les_var;            
  17.             }   
  18.             
  19.             /*######################################################################*/ 
  20.             
  21.             //TEST PUIS APPEL DE LA FUNCTION ajouter_matrice()
  22.           if( ($uploadfile) != ($uploaddir) ){ 
  23.           $les_var =   ajouter_matrice($uploadfile); 
  24.           //print_r($les_var);
  25.           
  26.                 $petit_tableau =array_chunk($les_var,5); 
  27.                 echo "Le nombre de petit tableau est:" .count($petit_tableau)."\n";         
  28.              print_r ($petit_tableau)."<br>"; 
  29.              // for($i;$i<count($petit_tableau);$i++){
  30.                  echo $no_site = $petit_tableau[0]; 
  31.              //}
  32.  
  33.                   list($no_site, $no_band, $distance, $taille,$intensite)= $les_var[$petit_tableau]; 
  34.                   echo $no_site.'/'. $no_band.$distance.'/'. $taille.'/'.$intensite; 
  35.                
  36.              
  37.           }else{ 
  38.              echo "Spécifier un fichier !"; 
  39.           }  
  40. ?> 
i M@N
i M@N
Déconnecté
One Love, One Heart, One Unity.
Hello.

Voilà comment je fais, c'est assez commenté tu devrais facilement pouvoir adapter à tes besoins :
  1. <?php
  2.  
  3.  
  4.  
  5. include('./base_connexion.php');  
  6.  
  7. /*Préparation de la requête qui vide la table*/  
  8. /*pas forcément nécessaire, peut être commenté*/  
  9. $sql = 'TRUNCATE TABLE ma_table';  
  10.  
  11. /*on exécute la requête*/  
  12. $result = mysql_query($sql);  
  13. /*on définit le fichier .csv*/  
  14.  
  15. $fichier = "./fichier.csv";  
  16.  
  17. /*On ouvre le fichier à importer en lecture seulement*/  
  18. if (file_exists($fichier)) {  
  19. $fp = fopen("$fichier", "r");  
  20. }  
  21. else {  
  22. /*le fichier n'existe pas*/  
  23. echo "Fichier introuvable !<br />Importation stoppée.";  
  24. exit();  
  25. }  
  26.  
  27. while (!feof($fp)) {  
  28. /*Tant qu'on n'atteint pas la fin du fichier on lit une ligne*/  
  29. $ligne = fgets($fp,4096);  
  30. /*On récupère les champs séparés par , dans liste*/  
  31. $liste = explode( ",",$ligne);  
  32. /*On assigne les variables*/  
  33. $variable1 = $liste[0];  
  34. $variable2 = $liste[1];  
  35. $variable3 = $liste[2];  
  36. $variable4 = $liste[3];  
  37. $variable5 = $liste[4];  
  38. /*Ajouter un nouvel enregistrement dans la table*/  
  39. $sql = "INSERT INTO ma_table VALUES('$variable1','$variable2','$variable3','$variable4','$variable5')";  
  40. $result= mysql_query($sql);  
  41.  
  42. if(mysql_error()) {  
  43. /*Erreur dans la base de donnees, sûrement la table qu'il faut créer*/  
  44. print "Erreur dans la base de données : ".mysql_error();  
  45. print "<br />Importation stoppée.";  
  46. exit();  
  47. }  
  48. else {  
  49. /*Tout va bien*/  
  50. print "$variable1|$variable2|$variable3|$variable4|$variable5<br />";  
  51. /*Fermeture du fichier*/  
  52. fclose($fp);  
  53.  
  54. echo '<br /><b>TABLE A JOUR ...</b><br />';  
  55.  
  56. /*Préparation de la requête d'optimisation*/  
  57. $sql = 'OPTIMIZE TABLE ma_table';  
  58. /*on exécute la requête*/  
  59. $result = mysql_query($sql);  
  60.  
  61. echo '<br /><b>TABLE OPTiMiSEE ...</b><br />';  
  62.  
  63. /*THE END*/  
  64. echo '<br /><b>O.K ! ALL DONE.</b><br />';  
  65.  
  66. }  
  67.  
  68. else {  
  69. echo'<br /><b>UPDATE FAiLURE !</b><br />';  
  70. }  
  71.  
  72. ?> 

Par contre si tu as des caractères spéciaux comme des virgules dans tes champs, des apostrophes, des points ou que sais-je pense à protéger tes variables (avec un string_replace ou une regex sur $liste ou $variable1-5 par exemple) ...

@+...
celia
celia
Déconnecté
J'avais déjà resolu mon problème .
Merci quand même pour ta réponse.

salut- @+
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Breizh Blog