traitement de fichier csv avec php

Répondre
celia
le 25/10/2007 à 16:51
celia
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. //TEST PUIS APPEL DE LA FUNCTION ajouter_matrice()
  20. if( ($uploadfile) != ($uploaddir) ){
  21. $les_var = ajouter_matrice($uploadfile);
  22. //print_r($les_var);

  23. $petit_tableau =array_chunk($les_var,5);
  24. echo "Le nombre de petit tableau est:" .count($petit_tableau)."\n";
  25. print_r ($petit_tableau)."<br>";
  26. // for($i;$i<count($petit_tableau);$i++){
  27. echo $no_site = $petit_tableau[0];
  28. //}

  29. list($no_site, $no_band, $distance, $taille,$intensite)= $les_var[$petit_tableau];
  30. echo $no_site.'/'. $no_band.$distance.'/'. $taille.'/'.$intensite;


  31. }else{
  32. echo "Spécifier un fichier !";
  33. }
  34. ?>
i M@N
le 26/10/2007 à 10:30
i M@N
Hello.

Voilà comment je fais, c'est assez commenté tu devrais facilement pouvoir adapter à tes besoins :
  1. <?php



  2. include('./base_connexion.php');

  3. /*Préparation de la requête qui vide la table*/
  4. /*pas forcément nécessaire, peut être commenté*/
  5. $sql = 'TRUNCATE TABLE ma_table';

  6. /*on exécute la requête*/
  7. $result = mysql_query($sql);
  8. /*on définit le fichier .csv*/

  9. $fichier = "./fichier.csv";

  10. /*On ouvre le fichier à importer en lecture seulement*/
  11. if (file_exists($fichier)) {
  12. $fp = fopen("$fichier", "r");
  13. }
  14. else {
  15. /*le fichier n'existe pas*/
  16. echo "Fichier introuvable !<br />Importation stoppée.";
  17. exit();
  18. }

  19. while (!feof($fp)) {
  20. /*Tant qu'on n'atteint pas la fin du fichier on lit une ligne*/
  21. $ligne = fgets($fp,4096);
  22. /*On récupère les champs séparés par , dans liste*/
  23. $liste = explode( ",",$ligne);
  24. /*On assigne les variables*/
  25. $variable1 = $liste[0];
  26. $variable2 = $liste[1];
  27. $variable3 = $liste[2];
  28. $variable4 = $liste[3];
  29. $variable5 = $liste[4];
  30. /*Ajouter un nouvel enregistrement dans la table*/
  31. $sql = "INSERT INTO ma_table VALUES('$variable1','$variable2','$variable3','$variable4','$variable5')";
  32. $result= mysql_query($sql);

  33. if(mysql_error()) {
  34. /*Erreur dans la base de donnees, sûrement la table qu'il faut créer*/
  35. print "Erreur dans la base de données : ".mysql_error();
  36. print "<br />Importation stoppée.";
  37. exit();
  38. }
  39. else {
  40. /*Tout va bien*/
  41. print "$variable1 | $variable2 | $variable3 | $variable4 | $variable5<br />";
  42. /*Fermeture du fichier*/
  43. fclose($fp);

  44. echo '<br /><b>TABLE A JOUR ...</b><br />';

  45. /*Préparation de la requête d'optimisation*/
  46. $sql = 'OPTIMIZE TABLE ma_table';
  47. /*on exécute la requête*/
  48. $result = mysql_query($sql);

  49. echo '<br /><b>TABLE OPTiMiSEE ...</b><br />';

  50. /*THE END*/
  51. echo '<br /><b>O.K ! ALL DONE.</b><br />';

  52. }

  53. else {
  54. echo'<br /><b>UPDATE FAiLURE !</b><br />';
  55. }

  56. ?>

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) ...

@+...
One Love, One Heart, One Unity.
celia
le 26/10/2007 à 16:39
celia
J'avais déjà resolu mon problème .
Merci quand même pour ta réponse.

salut- @+
karousn
le 30/04/2012 à 11:01
karousn
Je tembe à la même probleme si tu peux @celia partage votre solution
Karzo
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours