Rechercher : dans
Par :

{MySQL} script d'importation auto de csv vers BDD

Dernière réponse le 11 jui 2009 à 22:27:42 jeinny, le 8 jun 2009 à 15:08:10 
 Signaler ce message aux modérateurs

Bonjour à tous!

Je vous explique ma situation :
je dois récupérer des données excel qui sont au format csv, et les intégrer dans une BDD mysql.

Le problème est que mes employeurs souhaitent que je réalise une interface en php qui proposent un bouton d'importation qui gere automatiquement cette intégration.
en gros : un bouton qui ouvre un explorateur de fichiers, on choisi le csv que l'on veut, on valide et hop le csv est converti directement dans la BDD.

Ceci me paraît assez difficile vu mon niveau en php même si ce stage m'a beaucoup appri. De plus, ce ne sera pas moi qui gèrera l'intégration de ces fichiers CSV dans la BDD. Ce sera un utilisateur quelconque, qui ne devra rien faire d'autre que d'importer le fichier, sans gérer les paramètres de la BDD, d'où cette interface simplifiée que je dois créer...

y a-t-il quelqu'un qui a déjà été confronté à cette situation et/ou qui pourrait me preter main forte?
merci beaucoup!

Configuration: Windows XP Internet Explorer 7.0

Meilleures réponses pour « {MySQL} script d'importation auto de csv vers BDD » dans :
Importer et exporter des données sous MySQL VoirImportation et exportation Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant...
Administration de MySQL VoirLa base de données mysql Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant...

1

dam75, le 8 jun 2009 à 18:23:14

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

Répondre à dam75

2

jeinny, le 9 jun 2009 à 08:24:21

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

Répondre à jeinny

3

dam75, le 9 jun 2009 à 09:51:34
  • +1

Imagine que ton form soit :

<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

Répondre à dam75

4

jeinny, le 9 jun 2009 à 10:14:28

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";
}

?>

Répondre à jeinny

6

 djoudjou, le 11 jui 2009 à 22:27:42

Bonjour as tu reussi ?
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

Répondre à djoudjou

5

jeinny, le 9 jun 2009 à 10:16:00

Merci quand même pour tes reponse Dam75 mai jai trouvé plus facile !!

Répondre à jeinny