Probleme d'import d'un fichier .csv
Résolu
sahoumita
Messages postés
52
Date d'inscription
Statut
Membre
Dernière intervention
-
sahoumita Messages postés 52 Date d'inscription Statut Membre Dernière intervention -
sahoumita Messages postés 52 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai un petit probleme qui me bloque Et j'espere avoir une solution.
j'ai essayé d'importer des données d'un fichier .csv vers ma base mysql et ça a finalement marché aprés plusieurs essais.Mais le probleme c'est que lorsque les données sont importées une ligne vide s'ajoute aussi dans ma table et je ne sais ni la cause de ce probléme ni la solution bien sure.
Donc pour etre plus claire,voici mon code:
<?php
$fichier = "C:\Program Files\wamp\www\PHP\Book1.csv";
$db = mysql_connect("****","****","***") or die("Impossible de se connecter la base de donnees");
mysql_select_db("database1");
// ouverture du fichier en lecture
if (file_exists($fichier))
$fp = fopen("$fichier", "r");
else{ // fichier inconnu
echo "Fichier introuvable !<br>Importation stoppe";
exit();
}
// lors de l'importation faite gaffe au point virgule dans les commentaires car ca va vous décaler l'import
// importation
while (!feof($fp)){
$ligne = fgets($fp,4096);
$liste = explode(",",$ligne); // on cree un tableau des elements separe par point virgule
$id = $liste[0];
$login = $liste[1];
$pass_md5 = $liste[2];
$fonction = $liste[3];
$query = "INSERT INTO membre VALUES('$id','$login','$pass_md5','$fonction');";
$result= mysql_query($query, $db);
if (mysql_error()){
echo "Erreur dans la base de donnees soit des virgule sont presente, soit votre hebergeur vous lock <br> ou tout simplement
pour l'erreur suivante : ".mysql_error();
echo "<br>Importation stope";
fclose($fp);
exit();
}else{
echo "ok<br>";
}
}
echo "<br>Importation termine, avec succes.";
fclose($fp);
mysql_close($db);
?>
et apres execution de ce code voici ce qu'on m'indique:
ok
Notice: Undefined offset: 1 in C:\Program Files\wamp\www\PHP\raykhdm3.php on line 19
Notice: Undefined offset: 2 in C:\Program Files\wamp\www\PHP\raykhdm3.php on line 20
Notice: Undefined offset: 3 in C:\Program Files\wamp\www\PHP\raykhdm3.php on line 21
ok
Importation termine, avec succes. Réseau CommentCaMarche
CommentCaMarche.net en.kioskea.net es.kioskea.net pt.kioskea.net Droit-Finances.net Santé-Médecine.netSUPINFO, école d'ingénieurs Glossaire 0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A propos - Conditions générales - Plan - Top 50 - Partenaires - Contact - Index des marques - © Tous droits réservés 2009
J'attends votre aide car j'en ai vraiment besoin
Et merci d'avance
j'ai un petit probleme qui me bloque Et j'espere avoir une solution.
j'ai essayé d'importer des données d'un fichier .csv vers ma base mysql et ça a finalement marché aprés plusieurs essais.Mais le probleme c'est que lorsque les données sont importées une ligne vide s'ajoute aussi dans ma table et je ne sais ni la cause de ce probléme ni la solution bien sure.
Donc pour etre plus claire,voici mon code:
<?php
$fichier = "C:\Program Files\wamp\www\PHP\Book1.csv";
$db = mysql_connect("****","****","***") or die("Impossible de se connecter la base de donnees");
mysql_select_db("database1");
// ouverture du fichier en lecture
if (file_exists($fichier))
$fp = fopen("$fichier", "r");
else{ // fichier inconnu
echo "Fichier introuvable !<br>Importation stoppe";
exit();
}
// lors de l'importation faite gaffe au point virgule dans les commentaires car ca va vous décaler l'import
// importation
while (!feof($fp)){
$ligne = fgets($fp,4096);
$liste = explode(",",$ligne); // on cree un tableau des elements separe par point virgule
$id = $liste[0];
$login = $liste[1];
$pass_md5 = $liste[2];
$fonction = $liste[3];
$query = "INSERT INTO membre VALUES('$id','$login','$pass_md5','$fonction');";
$result= mysql_query($query, $db);
if (mysql_error()){
echo "Erreur dans la base de donnees soit des virgule sont presente, soit votre hebergeur vous lock <br> ou tout simplement
pour l'erreur suivante : ".mysql_error();
echo "<br>Importation stope";
fclose($fp);
exit();
}else{
echo "ok<br>";
}
}
echo "<br>Importation termine, avec succes.";
fclose($fp);
mysql_close($db);
?>
et apres execution de ce code voici ce qu'on m'indique:
ok
Notice: Undefined offset: 1 in C:\Program Files\wamp\www\PHP\raykhdm3.php on line 19
Notice: Undefined offset: 2 in C:\Program Files\wamp\www\PHP\raykhdm3.php on line 20
Notice: Undefined offset: 3 in C:\Program Files\wamp\www\PHP\raykhdm3.php on line 21
ok
Importation termine, avec succes. Réseau CommentCaMarche
CommentCaMarche.net en.kioskea.net es.kioskea.net pt.kioskea.net Droit-Finances.net Santé-Médecine.netSUPINFO, école d'ingénieurs Glossaire 0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A propos - Conditions générales - Plan - Top 50 - Partenaires - Contact - Index des marques - © Tous droits réservés 2009
J'attends votre aide car j'en ai vraiment besoin
Et merci d'avance
A voir également:
- Probleme d'import d'un fichier .csv
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
3 réponses
Salut,
personnellement j'avais eu pas mal de problèmes aussi avec l'importation de csv lorsque j'utilisais une boucle while avec !feof comme condition avec la fonction fgets...
Après quelques recherches, je me suis plutôt tourné vers la fonction php fgetcsv( )
En général j'utilise le script suivant pour importer mes données dans ma base et jusqu'à présent pas eu de problème (tant au niveau mysql que postgre) :
//on ouvre le fichier passé en paramètre
$fic = fopen ($fichier, 'rb');
while ( ($champs = fgetcsv($fic, 1024, ",") ) !== FALSE)
{
//declaration des champs à insérer, 4 dans ton cas
$val1 = $champs[0];
$val2 = $champs[1];
$val3 = $champs[2];
$val4 = $champs[3];
//insertion dans base
$requete = "INSERT INTO membre VALUES('$val1', '$val2', '$val3','$val4') ";
....
}
//on ferme le fichier
fclose($fic);
essaie ça...
personnellement j'avais eu pas mal de problèmes aussi avec l'importation de csv lorsque j'utilisais une boucle while avec !feof comme condition avec la fonction fgets...
Après quelques recherches, je me suis plutôt tourné vers la fonction php fgetcsv( )
En général j'utilise le script suivant pour importer mes données dans ma base et jusqu'à présent pas eu de problème (tant au niveau mysql que postgre) :
//on ouvre le fichier passé en paramètre
$fic = fopen ($fichier, 'rb');
while ( ($champs = fgetcsv($fic, 1024, ",") ) !== FALSE)
{
//declaration des champs à insérer, 4 dans ton cas
$val1 = $champs[0];
$val2 = $champs[1];
$val3 = $champs[2];
$val4 = $champs[3];
//insertion dans base
$requete = "INSERT INTO membre VALUES('$val1', '$val2', '$val3','$val4') ";
....
}
//on ferme le fichier
fclose($fic);
essaie ça...
Merci infiniment lefadrine,
tu sais depuis le jour où j'ai posté ce problème personne ne m'a répondu et je n'ai pas trouvé de solutions mais aprés avoir fait des modifications dans mon code selon ce que tu m'a proposé tout marche à merveille.
Maintenant, juste pour améliorer mon code,j'aimerais ajouter un bouton parcourir dans mon code pour laisser à l'utilisateur la possibilité de choisir son propre fichier .CSV mais je ne sais pas comment le faire.Donc, est-ce-que t'as une idée?
Et en tt cas merci beuacoup
tu sais depuis le jour où j'ai posté ce problème personne ne m'a répondu et je n'ai pas trouvé de solutions mais aprés avoir fait des modifications dans mon code selon ce que tu m'a proposé tout marche à merveille.
Maintenant, juste pour améliorer mon code,j'aimerais ajouter un bouton parcourir dans mon code pour laisser à l'utilisateur la possibilité de choisir son propre fichier .CSV mais je ne sais pas comment le faire.Donc, est-ce-que t'as une idée?
Et en tt cas merci beuacoup