{MySQL} script d'importation auto de csv vers BDD
Résolu/Fermé
jeinny
Messages postés
133
Date d'inscription
mardi 3 juin 2008
Statut
Membre
Dernière intervention
17 février 2010
-
8 juin 2009 à 15:08
monika06 - 4 mai 2016 à 21:45
monika06 - 4 mai 2016 à 21:45
A voir également:
- {MySQL} script d'importation auto de csv vers BDD
- Script vidéo youtube - Guide
- Windows 7 vers windows 10 - Accueil - Mise à jour
- Mysql community server - Télécharger - Bases de données
- Telecharger auto refresh - Télécharger - Divers Web & Internet
- Clavier qwerty vers azerty - Guide
7 réponses
jeinny
Messages postés
133
Date d'inscription
mardi 3 juin 2008
Statut
Membre
Dernière intervention
17 février 2010
26
9 juin 2009 à 10:14
9 juin 2009 à 10:14
c'est bon jai répondu toute seule a ma question
si certain ca les intéressse je vous laiise mon code:
//Le chemin d'acces a ton fichier sur le serveur
$fichier = fopen("nom_du_fichier.text_ou_.csv", "r");
//tant qu'on est pas a la fin du fichier :
while (!feof($fichier))
{
// On recupere toute la ligne
$uneLigne = fgets($fichier, 1024);
//On met dans un tableau les differentes valeurs trouvés (ici séparées par un ';')
$tableauValeurs = explode(';', $uneLigne);
// On crée la requete pour inserer les donner (ici il y a 12 champs donc de [0] a [11])
$sql="INSERT INTO Balance VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."', '".$tableauValeurs[4]."', '".$tableauValeurs[5]."', '".$tableauValeurs[6]."', '".$tableauValeurs[7]."', '".$tableauValeurs[8]."', '".$tableauValeurs[9]."', '".$tableauValeurs[10]."', '".$tableauValeurs[11]."')";
$req=mysql_query($sql)or die (mysql_error());
// la ligne est finie donc on passe a la ligne suivante (boucle)
}
//vérification et envoi d'une réponse à l'utilisateur
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";
}
?>
si certain ca les intéressse je vous laiise mon code:
//Le chemin d'acces a ton fichier sur le serveur
$fichier = fopen("nom_du_fichier.text_ou_.csv", "r");
//tant qu'on est pas a la fin du fichier :
while (!feof($fichier))
{
// On recupere toute la ligne
$uneLigne = fgets($fichier, 1024);
//On met dans un tableau les differentes valeurs trouvés (ici séparées par un ';')
$tableauValeurs = explode(';', $uneLigne);
// On crée la requete pour inserer les donner (ici il y a 12 champs donc de [0] a [11])
$sql="INSERT INTO Balance VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."', '".$tableauValeurs[4]."', '".$tableauValeurs[5]."', '".$tableauValeurs[6]."', '".$tableauValeurs[7]."', '".$tableauValeurs[8]."', '".$tableauValeurs[9]."', '".$tableauValeurs[10]."', '".$tableauValeurs[11]."')";
$req=mysql_query($sql)or die (mysql_error());
// la ligne est finie donc on passe a la ligne suivante (boucle)
}
//vérification et envoi d'une réponse à l'utilisateur
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";
}
?>
jeinny
Messages postés
133
Date d'inscription
mardi 3 juin 2008
Statut
Membre
Dernière intervention
17 février 2010
26
9 juin 2009 à 08:24
9 juin 2009 à 08:24
Bonjour,
merci tout dabord pour votre réponse .
je pense que 'mysqlimport ' me va parfaitement vu que le fichier texte et fait exqctement comme la table et sera toujours fait ainsi. mais le soucis c'est que je ne comprend pas trop le tutoriel que tu ma passé en aurai tu un autre qui explique mieux car je ne ompren pas trop là. !!
moi au dépard j'avit fait la deuxième solution mais si tu ma dit qu'il y a une meilleur solution je suis preneuse de plus celle que javai fait ne fonctionnait pas !!
je te remerci
merci tout dabord pour votre réponse .
je pense que 'mysqlimport ' me va parfaitement vu que le fichier texte et fait exqctement comme la table et sera toujours fait ainsi. mais le soucis c'est que je ne comprend pas trop le tutoriel que tu ma passé en aurai tu un autre qui explique mieux car je ne ompren pas trop là. !!
moi au dépard j'avit fait la deuxième solution mais si tu ma dit qu'il y a une meilleur solution je suis preneuse de plus celle que javai fait ne fonctionnait pas !!
je te remerci
dam75
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 février 2023
67
9 juin 2009 à 09:51
9 juin 2009 à 09:51
Imagine que ton form soit :
Alors coté PHP (fichier mapage.php dans mon exemple) tu auras le tableau $_FILES renseigné :
$_FILES['lefichier']['name'] => le nom d'origine du fichier
$_FILES['lefichier']['tmp_name'] => le nom sous lequel il aura ete sauvé sur ton serveur PHP (dépend de la conf PHP)
Il faut alors renommer le fichier du nom de la table (myslqimport se sert du nom de ficheir pour savoir la table dans laquelle importer les données)
Il te suffit alors d'appeler mysqlimport :
- madb est le nom de la base
- host le nom ou l'IP de ton serveur MySQL (localhost si machine locale)
- (en remplçant [options] par celles que tu veux : --lines-terminated-by=... , ... (voir doc dans l'url du post précédent)
Et voila :)
Par contre, il est important de noter :
- le code ci-dessous ne fait aucune vérification d'intégrité, de taille, ...
- Si tu veux mettre cela en production, il FAUT ajouter ces tests pour éviter que des petits malins tentent de faire n'importe quoi en envoyant des virus, ...
Bon courage
<form enctype="multipart/form-data" action="mapage.php" method="POST"> <input name="lefichier" type="file" /><br /> <input type="submit" value="Envoyer le fichier" /> </form>
Alors coté PHP (fichier mapage.php dans mon exemple) tu auras le tableau $_FILES renseigné :
$_FILES['lefichier']['name'] => le nom d'origine du fichier
$_FILES['lefichier']['tmp_name'] => le nom sous lequel il aura ete sauvé sur ton serveur PHP (dépend de la conf PHP)
Il faut alors renommer le fichier du nom de la table (myslqimport se sert du nom de ficheir pour savoir la table dans laquelle importer les données)
$_fic = "/tmp/nom_de_la_table.txt"; // tu mets evidemment ce que tu veux // puis on deplace le fichier move_uploaded_file($_FILES['monfichier']['tmp_name'], $_fic); // en réalité, il faut tester le résultat true/false, cf doc PHP
Il te suffit alors d'appeler mysqlimport :
- madb est le nom de la base
- host le nom ou l'IP de ton serveur MySQL (localhost si machine locale)
- (en remplçant [options] par celles que tu veux : --lines-terminated-by=... , ... (voir doc dans l'url du post précédent)
$_cmd = 'mysqlimport -hhost [options] madb '.$_fic; `$_cmd`;
Et voila :)
Par contre, il est important de noter :
- le code ci-dessous ne fait aucune vérification d'intégrité, de taille, ...
- Si tu veux mettre cela en production, il FAUT ajouter ces tests pour éviter que des petits malins tentent de faire n'importe quoi en envoyant des virus, ...
Bon courage
jeinny
Messages postés
133
Date d'inscription
mardi 3 juin 2008
Statut
Membre
Dernière intervention
17 février 2010
26
9 juin 2009 à 10:16
9 juin 2009 à 10:16
merci quand même pour tes reponse Dam75 mai jai trouvé plus facile !!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
y.kh
Messages postés
16
Date d'inscription
mardi 24 novembre 2009
Statut
Membre
Dernière intervention
1 avril 2010
10
10 févr. 2010 à 14:07
10 févr. 2010 à 14:07
bonjour
j'ai un problème d'import du fichier CSV vers ma base mysql à travers phpmyadmin, j'ai une erreur serveur apache !!??
Quelqu'un pourrait m'aider SVP
Merci d'avance
j'ai un problème d'import du fichier CSV vers ma base mysql à travers phpmyadmin, j'ai une erreur serveur apache !!??
Quelqu'un pourrait m'aider SVP
Merci d'avance
dam75
Messages postés
1041
Date d'inscription
lundi 4 mai 2009
Statut
Webmaster
Dernière intervention
21 février 2023
67
8 juin 2009 à 18:23
8 juin 2009 à 18:23
Bonjour,
Si la structure de tes fichiers csv est fixe, et correspond aux champs de ta table Mysql, tu peux en PHP simplement appeler mysqlimport (commande systeme) via `mysqlimport` (les backquotes pour executer une commande shell depuis PHP) ... tu peux spécifier les champs, les separateurs, ... : voir la doc sur http://dev.mysql.com/doc/refman/5.0/fr/mysqlimport.html
Sinon, ou si tu veux pouvoir faire des controles, il faut ouvrir le fichier en PHP (fopen), le lire, et generer les requetes INSERT à la main ... bcp plus de boulot :)
Bon courage
Si la structure de tes fichiers csv est fixe, et correspond aux champs de ta table Mysql, tu peux en PHP simplement appeler mysqlimport (commande systeme) via `mysqlimport` (les backquotes pour executer une commande shell depuis PHP) ... tu peux spécifier les champs, les separateurs, ... : voir la doc sur http://dev.mysql.com/doc/refman/5.0/fr/mysqlimport.html
Sinon, ou si tu veux pouvoir faire des controles, il faut ouvrir le fichier en PHP (fopen), le lire, et generer les requetes INSERT à la main ... bcp plus de boulot :)
Bon courage
JANGO5
Messages postés
92
Date d'inscription
mardi 18 juin 2013
Statut
Membre
Dernière intervention
13 août 2014
1
5 juil. 2013 à 17:53
5 juil. 2013 à 17:53
Bonjour,
Je suis un peu dans la même situation que l'initiateur de cette réflexion .
je travaille sur Excel pour la configuration d'un base de données je convertis mes feuilles (tables) en csv et que j'injecte dans la base mysql en utiisant des LOAD DATA INFILE . donc j'ai déjà une macro qui me converti tous en csv .
J'aurais besoin d'une autre macro ou d'un code qui me génère le script sql adéquat pour chaque table (feuille) après le passage en csv .
Exemple pour une feuille (table) REGION après passage en csv (garde le meme nom) que j'obtienne le script suivant :
LOAD DATA INFILE 'REGION.csv'
INTO TABLE REGION
FIELDS
TERMINATED BY ';'
ENCLOSED BY ''
LINES
STARTING BY ''
TERMINATED BY '\n'
IGNORE 1 LINES
(ID_REGION , LIBELLE ;
ID_REGION et LIBELLE étant les colonnes de la table région
Remarque : le nom des tables (feuilles) est le même pour les tables de la base.
si vous avez une idée pour me permettre d'automatiser tous ça je suis preneur .
Merci et dsl pour le paragraphe .
cdlt.
Je suis un peu dans la même situation que l'initiateur de cette réflexion .
je travaille sur Excel pour la configuration d'un base de données je convertis mes feuilles (tables) en csv et que j'injecte dans la base mysql en utiisant des LOAD DATA INFILE . donc j'ai déjà une macro qui me converti tous en csv .
J'aurais besoin d'une autre macro ou d'un code qui me génère le script sql adéquat pour chaque table (feuille) après le passage en csv .
Exemple pour une feuille (table) REGION après passage en csv (garde le meme nom) que j'obtienne le script suivant :
LOAD DATA INFILE 'REGION.csv'
INTO TABLE REGION
FIELDS
TERMINATED BY ';'
ENCLOSED BY ''
LINES
STARTING BY ''
TERMINATED BY '\n'
IGNORE 1 LINES
(ID_REGION , LIBELLE ;
ID_REGION et LIBELLE étant les colonnes de la table région
Remarque : le nom des tables (feuilles) est le même pour les tables de la base.
si vous avez une idée pour me permettre d'automatiser tous ça je suis preneur .
Merci et dsl pour le paragraphe .
cdlt.
11 juil. 2009 à 22:27
j'aimerai pouvoir me servir de ton experience..
je travail sur excel et j'aimerai, par une macro, simplement, mettre a jour des données d'un site iternet, en envoyant certaine données de cellules du tableau excel...
ou en envoyant les données dans une bdd,
ou bien en generant des fichiers html et en les enregistrant sur mon serveur...
merci
4 mai 2016 à 21:45