Import CSV vers mySQL
Résolu/Fermé
nadia451
Messages postés
11
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
-
23 mai 2012 à 09:11
Alpha Streetlive - 26 juin 2014 à 14:12
Alpha Streetlive - 26 juin 2014 à 14:12
A voir également:
- Import CSV vers mySQL
- Windows 7 vers windows 10 - Accueil - Mise à jour
- Mysql community server - Télécharger - Bases de données
- Clavier qwerty vers azerty - Guide
- Transferer photo android vers pc - Guide
- Vers quelle adresse web renvoie ce lien - Guide
13 réponses
Utilisateur anonyme
23 mai 2012 à 09:31
23 mai 2012 à 09:31
Bonjour
Si tu utilisais les fonctions faites pour CSV, tu aurais sans doute moins de problèmes...
Regarde la doc de la fonction fgetcsv() au lieu d'utiliser fgets.
Car le format CSV ne consiste pas simplement à séparer les champs par des ";" et le traitement que tu fais n'est pas correct.
Si tu utilisais les fonctions faites pour CSV, tu aurais sans doute moins de problèmes...
Regarde la doc de la fonction fgetcsv() au lieu d'utiliser fgets.
Car le format CSV ne consiste pas simplement à séparer les champs par des ";" et le traitement que tu fais n'est pas correct.
nadia451
Messages postés
11
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
23 mai 2012 à 10:21
23 mai 2012 à 10:21
merci le père,
je vais reprendre mon code avec fgetcsv(), par contre quel traitement n'est pas bon ? l'enregistrement dans la base de données ou autre chose ?
je vais reprendre mon code avec fgetcsv(), par contre quel traitement n'est pas bon ? l'enregistrement dans la base de données ou autre chose ?
Utilisateur anonyme
23 mai 2012 à 10:42
23 mai 2012 à 10:42
Ce qui n'est pas bon, c'est d'utiliser fgets et explode, car le format CSV ne se résume pas à l'insertion de ";" dans le texte.
Ce traitement 'naïf' oublie le cas où les valeurs contenues dans le fichier comportent certains caractères spéciaux, à commencer par les ";" eux-mêmes, mais aussi les espaces, les guillemets, les changements de ligne et j'en oublie sans doute.
Ma remarque ne portait pas sur l'enregistrement dans la base de données, mais puisque tu en parles...
Tu te rends compte que si une de tes données contient une apostrophe, ta requête va planter ? Utilise PDO::quote() pour échapper les caractères spéciaux, ou mieux, utilise une requête préparée.
Ce traitement 'naïf' oublie le cas où les valeurs contenues dans le fichier comportent certains caractères spéciaux, à commencer par les ";" eux-mêmes, mais aussi les espaces, les guillemets, les changements de ligne et j'en oublie sans doute.
Ma remarque ne portait pas sur l'enregistrement dans la base de données, mais puisque tu en parles...
Tu te rends compte que si une de tes données contient une apostrophe, ta requête va planter ? Utilise PDO::quote() pour échapper les caractères spéciaux, ou mieux, utilise une requête préparée.
nadia451
Messages postés
11
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
23 mai 2012 à 11:00
23 mai 2012 à 11:00
Dsl mais si je suis venue demander de l'aide ce qu'il y' à certainement des choses qui m'échappent donc non je ne me rendais pas compte que les caractères spéciaux allait poser problème.
Tu as bien raison car quand j'essaie d'importer une colonne qui contient des descriptions ma requête plante, je savais que ça venait des caractères spéciaux mais je voyais pas comment faire
merci de m'avoir aider
Tu as bien raison car quand j'essaie d'importer une colonne qui contient des descriptions ma requête plante, je savais que ça venait des caractères spéciaux mais je voyais pas comment faire
merci de m'avoir aider
nadia451
Messages postés
11
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
24 mai 2012 à 11:43
24 mai 2012 à 11:43
Bonjour,
ça ne marche toujours pas, pour l'instant je travaille sur l'import des dates mais en vin,
certaines sont importées correctement mais pas d'autres :/
ça ne marche toujours pas, pour l'instant je travaille sur l'import des dates mais en vin,
certaines sont importées correctement mais pas d'autres :/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
24 mai 2012 à 11:50
24 mai 2012 à 11:50
Peux-tu montrer ton code avec fgetcsv ?
Peux-tu mettre un échantillon de données (non confidentielles) avec Cjoint ou autre ?
Peux-tu mettre un échantillon de données (non confidentielles) avec Cjoint ou autre ?
nadia451
Messages postés
11
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
24 mai 2012 à 11:56
24 mai 2012 à 11:56
<?php include('./include/Connection.inc.php'); include('./include/script.inc.php'); date_default_timezone_set('Europe/Paris'); $fichier = $_FILES['userFile']['tmp_name']; //$fichier = 'test.csv'; if (file_exists($fichier)) $fp = fopen("$fichier", "r"); else{ // fichier inconnu echo "Fichier introuvable !<br>Importation stoppe."; exit(); } while (($liste = fgetcsv($fp, 1000, ';')) !== FALSE){ $deb = date("Y-d-m", strtotime($liste[1])); $debu = new DateTime($deb); $debu=$debu->format('Y-m-d'); $finD = date("Y-d-m",strtotime($liste[3])); $fin = new DateTime($finD); $fin=$fin->format('Y-m-d'); // $descr = $bdd->quote($liste[16], PDO::PARAM_STR); $req = $bdd->exec("INSERT INTO import VALUES('".$liste[0]."', '".$debu."', '".$fin."', '".$liste[17]."', '".$liste[17]."', '".$liste[0]."', '')"); } fclose($fp); if ($req) { echo "Ajout dans la base de données effectué avec succès"; } else { echo "Echec dans l'ajout dans la base de données"; } ?>
je t'envoie un échantillon tout de suite.
Merci beaucoup pour tes réponses rapides
nadia451
Messages postés
11
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
24 mai 2012 à 12:00
24 mai 2012 à 12:00
nadia451
Messages postés
11
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
24 mai 2012 à 12:02
24 mai 2012 à 12:02
l'enregistrement dans ma bdd : https://www.cjoint.com/?0EymchUeK0c
Utilisateur anonyme
24 mai 2012 à 13:56
24 mai 2012 à 13:56
Je comprends !
J'aurais pu le voir avant...
L'importation se passe bien, ce qui ne va pas c'est ton traitement des dates.
La fonction strtotime attend une date au format américain, et tes dates sont au format français... Visiblement, dès que le jour du mois est supérieur à 12, il te donne un 0 (car pour lui ça doit être le mois) ,qui devient 1/1/70 quand tu retransformes 'en clair'.
N'utilise pas strtotime, fais ta propre fonction en utilisant explode ou substr.
J'aurais pu le voir avant...
L'importation se passe bien, ce qui ne va pas c'est ton traitement des dates.
La fonction strtotime attend une date au format américain, et tes dates sont au format français... Visiblement, dès que le jour du mois est supérieur à 12, il te donne un 0 (car pour lui ça doit être le mois) ,qui devient 1/1/70 quand tu retransformes 'en clair'.
N'utilise pas strtotime, fais ta propre fonction en utilisant explode ou substr.
nadia451
Messages postés
11
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
24 mai 2012 à 14:10
24 mai 2012 à 14:10
d'accord en plus j'avais remarqué dans ma base de données que ça inversé les jours et les mois ! merci beaucoup je vais changer !
c'est quoi le problème de l'encodage ?
c'est quoi le problème de l'encodage ?
Utilisateur anonyme
Modifié par le père. le 24/05/2012 à 14:26
Modifié par le père. le 24/05/2012 à 14:26
Tu as des ? à la place des é. Les données d'origine ont dû être traitées tantôt en utf8, tantôt en iso-8859-x, au gré des logiciels qui les ont manipulées.
C'est peut être facile à corriger si le fichier csv n'est pas trop volumineux, et si ton site est cohérent à ce sujet.
Et vive la natation (20 ans de pratique chez les maîtres ^^)
C'est peut être facile à corriger si le fichier csv n'est pas trop volumineux, et si ton site est cohérent à ce sujet.
Et vive la natation (20 ans de pratique chez les maîtres ^^)
nadia451
Messages postés
11
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
24 mai 2012 à 14:46
24 mai 2012 à 14:46
D'accord, oui à chaque fois que je modifie mon fichier CSV je suis obligé de le ré-ouvrir avec un éditeur et de l'encoder en utf8 ! le problème vient surement de là !
Oui vive la natation, je suis en stage dans une organisation sportive donc voilà =)
Merci toutes mes dates sont importées au bon format maintenant !! =D
Je mets le code si jamais quelqu'un a le même soucis que moi !
Oui vive la natation, je suis en stage dans une organisation sportive donc voilà =)
Merci toutes mes dates sont importées au bon format maintenant !! =D
Je mets le code si jamais quelqu'un a le même soucis que moi !
<?php include('./include/Connection.inc.php'); include('./include/script.inc.php'); date_default_timezone_set('Europe/Paris'); $fichier = $_FILES['userFile']['tmp_name']; function dateFR2US($date) { $date = explode('/', $date); $date = array_reverse($date); $date = implode('-', $date); return $date; } if (file_exists($fichier)) $fp = fopen("$fichier", "r"); else{ // fichier inconnu echo "Fichier introuvable !<br>Importation stoppe."; exit(); } while (($liste = fgetcsv($fp, 1000, ';')) !== FALSE){ $deb = dateFR2US($liste[1]); $deb = date("Y-m-d", strtotime($deb)); $debu = new DateTime($deb); $debu=$debu->format('Y-m-d'); $finD = dateFR2US($liste[3]); $finD = date("Y-m-d",strtotime($finD)); $fin = new DateTime($finD); $fin=$fin->format('Y-m-d'); $req = $bdd->exec("INSERT INTO import VALUES('".$liste[0]."', '".$debu."', '".$fin."', '".$liste[17]."', '".$liste[17]."', '".$liste[0]."', '')"); } // $req->closeCursor(); // $req->execute(); fclose($fp); if ($req) { echo "Ajout dans la base de données effectué avec succès"; } else { echo "Echec dans l'ajout dans la base de données"; } ?>
lagsurfer
Messages postés
1
Date d'inscription
lundi 8 octobre 2012
Statut
Membre
Dernière intervention
8 octobre 2012
8 oct. 2012 à 23:23
8 oct. 2012 à 23:23
Bonjour, je suis désespérément à la recherche d'un script PHP simple me permettant de récupérer les NOM, PRENOM d'une liste d'élèves située dans un fichier .csv!!
Puis de les insérer dans ma table "eleves"... dont la structure est CODE_ELEVE, CODE_CLASSE, NOM, PRENOM
J'ai essayé d'utiliser et d'adapter votre code, mais n'utilisant pas les dates, je suis complètement perdu...
Pourriez vous m'aider?
Merci
Nico
Puis de les insérer dans ma table "eleves"... dont la structure est CODE_ELEVE, CODE_CLASSE, NOM, PRENOM
J'ai essayé d'utiliser et d'adapter votre code, mais n'utilisant pas les dates, je suis complètement perdu...
Pourriez vous m'aider?
Merci
Nico
qyounes1970
Messages postés
2
Date d'inscription
jeudi 18 octobre 2012
Statut
Membre
Dernière intervention
18 octobre 2012
18 oct. 2012 à 19:14
18 oct. 2012 à 19:14
je ne sais pas est-ce que ca peut t'aider.....
<?php
//connect to the database
$connect = mysql_connect("root","user","pass");
mysql_select_db("bdd",$connect); //select the table
//
if ($_FILES[csv][size] > 0) {
//get the csv file
$file = $_FILES[csv][tmp_name];
$handle = fopen($file,"r");
//loop through the csv file and insert into database
do {
if ($data[0]) {
mysql_query("INSERT INTO eleves (CODE_ELEVE, CODE_CLASSE, NOM, PRENOM) VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".addslashes($data[2])."',
'".addslashes($data[3])."'
)
");
}
} while($data = fgetcsv($handle, 10000, ",", "\""));
}
?>
<?php
//connect to the database
$connect = mysql_connect("root","user","pass");
mysql_select_db("bdd",$connect); //select the table
//
if ($_FILES[csv][size] > 0) {
//get the csv file
$file = $_FILES[csv][tmp_name];
$handle = fopen($file,"r");
//loop through the csv file and insert into database
do {
if ($data[0]) {
mysql_query("INSERT INTO eleves (CODE_ELEVE, CODE_CLASSE, NOM, PRENOM) VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".addslashes($data[2])."',
'".addslashes($data[3])."'
)
");
}
} while($data = fgetcsv($handle, 10000, ",", "\""));
}
?>
Réponse deux ans plus tard!
N'oublies pas qu'un fichier CSV est manipulable sous excel! Tu peux simplement supprimer les lignes dont tu n'as pas besoin, faire des tris sur les données utiles, sauvegarder en CSV et importer à l'aide de PHPMyAdmin par exemple!
Pourquoi faire simple quand on peux faire plus simple?
N'oublies pas qu'un fichier CSV est manipulable sous excel! Tu peux simplement supprimer les lignes dont tu n'as pas besoin, faire des tris sur les données utiles, sauvegarder en CSV et importer à l'aide de PHPMyAdmin par exemple!
Pourquoi faire simple quand on peux faire plus simple?