IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Importation de données dans une base [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut Importation de données dans une base
    Bonjour, je suis à la recherche de propositions et de solutions pour permettre l'importation massive de données dans ma base, qui gère des sociétés et leurs employés (12 tables au total)

    Actuellement, l'ajout d'un nouvel employé et d'une nouvelle société se fait un à un à partir d'un formulaire.
    Je voudrai pouvoir ajouter ces informations en grande quantité d'un seul coup, afin de faciliter la vie des utilisateurs.

    On m'as parlé de l'importation à partir de fichiers CSV et de la commande(la doc : ) http://dev.mysql.com/doc/refman/5.0/fr/load-data.html, ou encore de XML, mais tout cela est assez flou pour moi malgré la doc.

    Je voudrai quelque chose de vraiment simple à mettre en place, il n'y a pas besoin de gros contrôles sur les données puisque c'est une application locale et que les utilisateurs seront formés au préalable, sur un type de fichier défini qui ne changera pas.

    Selon vous, quelle est la meilleure solution?
    Existe-t-il, si possible, des scripts déjà réalisés afin de me faciliter le travail?


  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Avec du CSV, pas besoin de script, ça se fait en une commande. Voir directement la doc de MySQL : http://dev.mysql.com/doc/refman/5.0/fr/mysqlimport.html.

    A partir d'un fichier XML, ça se transforme "facilement" en requête SQL en utilisant XSL (feuille de style pour XML). Après, il suffit d'exécuter d'un bloc toutes ces requêtes.

    Pour t'en dire plus, il faudrait que tu détailles un peu plus ce que tu veux faire. Parce qu'entre remplir un formulaire ou créer un CSV (ou du XML), à part des différences d'ergonomie, je ne vois pas réellement où est le gain pour l'utilisateur.

    Par contre, personnellement (ça n'engage que moi), je ne suis pas partisan de dire "on ne vérifie rien, les gens savent faire". Un minimum de contrôle évite un maximum d'ennuis.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    Le gain au niveau utilisateur serait de pouvoir importer facilement plusieurs enregistrements à la fois, et non un par un comme le fait le formulaire actuel.

    Ce que je recherche précisément,c'est un format de données spécifique facile à manipuler pour un utilisateur non informaticien, le format restera standard et n'évoluera pas. Par exemple, l'idée d'un fichier excel contenant plusieurs colonnes, chaque colonne correspondant à un champ de la table testeur ou société, me parait une solution facilement exploitable pour l''utilisateur.

    Existe-t-il un moyen rapide à mettre en place pour convertir ces données en commandes sql?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO testeur (NomTesteur, PrenomTesteur ... )

    Concernant XML, comment se manipulent les XSL? Est-ce simple pour un utilisateur classique?

    Merci

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Dans ce cas, je pense qu'un tableur pour éditer du CSV est le plus simple.

    XSLT, non, très clairement, ce n'est pas accessible à un utilisateur lambda. Mais ce n'est pas à lui de le faire : l'utilisateur fournit un fichier XML, il le passe dans une moulinette paramétrée au préalable et ça lui sort du SQL.
    Au passage, si le fichier est renseigné à la main, du XML n'est pas la bonne solution : c'est beaucoup trop "lourd" comparé à un CSV (par contre, pour des traitements "automatiques", le XML est largement plus souple).

    Mais je le répète : si ton CSV est bien formatté (ses colonnes sont les mêmes que celles de la table), il n'y a pas besoin de convertir en SQL pour insérer. Il y a un outil pour ça.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    Oui merci pour ta rapidité, l'importation n'aura pas lieu de façon très régulière et ne comportera pas un nombre conséquent de données à chaque fois.

    Concernant l'outil mysqlimport, comment le faire manipuler par l'utilisateur?

    Et pour LOAD DATA INFILE, supporte-il le CSV?

    J'ai pour l'instant fait un test avec un simple fichier test.txt qui contient
    ALAIN
    PASCAL MM
    FLO
    TEST
    JAMES
    B
    et qui est placé dans le même répertoire que mes scripts.

    Pour le test, j'ai lancé la commande comme ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("LOAD DATA INFILE \"test.txt\" INTO TABLE test ");

    mais rien ne se passe!
    Quelle est la meilleure solution? mysqlimport ou LOAD DATA INFILE?
    Dans les deux cas, pourriez vous m'expliquer leur fonctionnement avec un exemple?


  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Tu as lu la doc que je t'ai envoyé ?

    Pour insérer le contenu dans la table MA_TABLE, il faut nommer ton fichier MA_TABLE.cequetuveux (donc MA_TABLE.csv convient tout à fait).

    Ensuite, un CSV sépare les colonnes par des virgules. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Torvalds,Linus,linus@kernel.org,0123456789
    Stallman,Richard,rms@gnu.org,9876543210
    A ce fichier correspond une table qui pourrait être créée ainsi :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE   TABLE MA_TABLE
             (
                surname varchar(100),
                firstname varchar(100),
                mail varchar(100),
                phone varchar(15)
             );

    Pour insérer le CSV dans cette table (toujours en lisant la doc que je t'ai donné), tu peux lancer la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqlimport [options] database fichier.csv
    Je te laisse lire la doc (http://dev.mysql.com/doc/refman/5.0/fr/mysqlimport.html) pour savoir de quelles options tu as besoin.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Points : 192
    Points
    192
    Par défaut
    Oui, j'ai lu la doc que tu m'as envoyé.
    En suivant bien toutes les explications, je me suis aperçu que mon problème venait du fait que je ne stockait pas le fichier au bon endroit sur le serveur, et donc l'importation échouait à chaque fois.

    Merci de tes conseils, je pense que je vais plutôt utiliser LOAD DATA INFILE directement dans le script au lieu de passer par la console sql, car l'utilisation me semble plus compliquée pour un utilisateur lambda.

    Je mets le sujet en résolu, j'aurai probablement besoin de tes conseils bientôt pour gérer le contrôle des données, car c'est vrai que faire confiance à l'utilisateur pourrait entrainer une perte de données.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Importer des données dans une base MySQL
    Par koraichi dans le forum Administration
    Réponses: 6
    Dernier message: 29/01/2014, 01h06
  2. Réponses: 4
    Dernier message: 11/03/2011, 14h45
  3. Réponses: 2
    Dernier message: 22/12/2009, 22h29
  4. problème d'import des données dans une base de donnees oracle 10g
    Par abderrahman86 dans le forum Import/Export
    Réponses: 4
    Dernier message: 14/05/2009, 17h42
  5. importer feuille excel dans une base de données sql server
    Par abdelmajid_daosabah dans le forum ASP.NET
    Réponses: 5
    Dernier message: 05/05/2008, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo