[RESOLU] problème insertion de données issues de csv dans une table

problème insertion de données issues de csv dans une table [RESOLU] - PHP - Programmation

Marsh Posté le 20-02-2006 à 14:12:13    

Bonjour à tous!!
 
je suis actuellement bloqué sur une importation de données via un fichier csv.
je suis novice en php, et je viens de découvrir la majorité des fonctions incluses dans ce code :  

Code :
  1. <?
  2. if (isset ($_POST['importer']) AND !empty ($_POST['importer']))
  3. {
  4. mysql_connect("localhost", "root", "" );
  5. mysql_select_db("carte_demarchage" );
  6. $row=1;
  7. $handle = fopen($_POST['importer'], 'r' );
  8. while (($data = fgetcsv($handle, 1000, ';')) !== FALSE)
  9. {$num = count($data);
  10. echo '<p> '.$num.' entrées à la ligne'.$row.' : <br /> </p> \n';
  11. $row++;
  12. for ($c=0; $c < $num; $c++)
  13. {echo ($data[$c].'<br />');
  14. $essai = explode (";" , $data[$c]);
  15. //test de $essai
  16. echo $essai[0];
  17. echo $essai[1];
  18. $requeteinsertion = mysql_query ('INSERT INTO tp_fdv (CodeRemettant, LibRemettant) VALUES ("'.$essai['0'].'", "'.$essai['1'].'" ) ') or die(mysql_error());
  19. }
  20. //lit le fichier incarné par $handle
  21. //$contents = fread ($handle, filesize ($_POST['importer']));
  22. //echo $contents;
  23. echo '<br> youplaliyouplala';
  24. }
  25. fclose($handle);}
  26. //else { echo 'Veuillez spécifier le chemin d\'un fichier  ';}
  27. ?>


 
alors voilà j'ai plusieurs soucis :  
1 - mon fichier csv a pour séparateur de champs le ';'.
lorsque je fais : echo ($data[$c].'<br />'); ça m'affiche chaque champs à la ligne.
exemple :  
(ligne 1 qui correspond au nom des champs)
Identifiant
nom
prénom
....  
 
(ligne 2 qui correspond aux données cette fois ci )
abcd
dupont
robert
....
 
est-ce normal? je dois pas avoir plutot tout à la suite et avoir un saut de ligne à la fin de chaque ligne et non à la fin de chaque champ?
 
2- mon code me met comme erreur undefined offset... on line 26, c'est à dire auè niveau des echo $essai[0] et [1]
et idem avec offset 2...
ça veut dire quoi? :pt1cable:  
 
qq'un peut m'orienter un peu s'il vous plait?
 
merci beaucoup!!! :D
 
[edit]
bon déjà $essai[1] n'existe pas...d'ou les problèmes d'offset.
seul $essai[0] est valide...enfin...façon de parler.
 
le résultat de ce m..dier : il m'insere toutes mes données les 1 ) la suite des autres dans le champ coderemettant...?
ça doit être le explode qui me donne des résultats inattendus, ou les fgetcsv...


Message édité par flock86 le 21-02-2006 à 12:25:52
Reply

Marsh Posté le 20-02-2006 à 14:12:13   

Reply

Marsh Posté le 20-02-2006 à 16:52:51    

Vu que tu mets un '<br />' aprés chaque champs ("echo ($data[$c].'<br />');" ) , c'est normal que ca revienne à la ligne tout le temps.
 
Quand à ton explode, a quoi il sert? Il ne risque pas d'y avoir beaucoup de ";" dans ton texte vu que "fgetcsv()" va les avoir quasiment tous viré s'il ne les a tout simplement pas tous viré.

Reply

Marsh Posté le 20-02-2006 à 17:05:00    

aaaaaaaaaaaaah
ok! merci omega2 pour ta réponse!!
 
le explode c'est pas très malin c'est sur...je voulais qu'il m'explose la ligne qui correspond à $data[$c], m'en faire un array pour l'insérer dans ma table.
donc avec fgetcsv je récupère toutes les données de mon csv...
mais s'il ils sont pas séparés par quelque chose comment l'insérer dans ma table?
faut que je fasse un array à partir de $data?
et la première ligne du csv c'est le nom des champs...ne vont-ils pas ête insérés comme des valeurs dans ma table?  
je maitrise pas, là c'est sur!
mais déjà merci pour ces indications je vais continuer à chercher...et virer les saloperies que j'ai écrit..
 
[edit] bon j'ai trouvé un script qui importe les données d'un fichier csv dans une table:
le voici :  

Code :
  1. <?php
  2. // ------------------------------------------------------------------------- //
  3. // Insérer le contenu d'un fichier CSV dans une table MySQL.                 //
  4. // ------------------------------------------------------------------------- //
  5. // Auteur: Perrich                                                           //
  6. // Email:  perrich@club-internet.fr                                          //
  7. // Web:    http://www.frshop.net/                                            //
  8. // ------------------------------------------------------------------------- //
  9. // $fileName  : le nom du fichier
  10. // $tableName : le nom de la table
  11. // $con       : id de connexion à MySQL (recupéré avec $con = mysql_connect(...)
  12. function insertIntoTable( $fileName, $tableName, $con )
  13. {
  14.     $file = fopen( $fileName, 'r' );
  15.     $k = 0;
  16.  
  17.     while ( ! feof( $file ) )
  18.     {
  19.         $k++;
  20.         $line = fgets( $file, 1024 );
  21.         if ( strlen( $line ) > 2 )
  22.         {
  23.             $line = addslashes( $line );
  24.             $line = str_replace ( ";", "', '", $line );
  25.             $requete = 'INSERT INTO '.$tableName.' VALUES ( \''.$line.'\' ) ';
  26.             if ( ! mysql_query ( $requete, $con ) )
  27.                 echo 'Erreur Ligne '.$k.' : '.mysql_error().'<br>'.$requete.'<br>';
  28.         }
  29.         else
  30.             echo 'Ligne '.$k.' ignorée.<br>';
  31.     }
  32.     echo '<p>Insertion du fichier '.$fileName.' terminé.</p><hr>';
  33.     fclose( $file );
  34. }
  35. ?>


 
en remerciant son auteur et en déplorant de ne pas avoir trouvé seul ce code...
en tous les cas, il m'a appris plein de choses...
bonne journée à tous!!
 


Message édité par flock86 le 21-02-2006 à 12:24:48
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed