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 :

Débutant - Insertion d'un fichier excel dans une base mysql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut Débutant - Insertion d'un fichier excel dans une base mysql
    Bonjour,

    Je reprécise que je suis débutant en Php et MySql, toutefois, je suis plus à l'aise en C++ et Access. On m'a confié le projet suivant, récupérer les données d'un fichier excel et inserer les valeurs dans les tables correspondantes de ma bd mysql.

    Je suis paumé. J'ai essayé de chercher dans la faq, mais je n'ai rien trouvé qui me convient.

    J'aurais effectué les opérations suivantes en C++ :

    1. Convertir le fichier Excel en CVS (pour séparer les données d'une ligne par des ";")

    2. Je ne sais pas par quelle miracle, mais j'ouvre le fichier et je récupère chaque mot entre deux ";" (si vous avez le nom des fonctions pour récupérer une ligne d'un fichier dans une chaine de caractère et extraire une sous-chaine en fonction d'un séparateur (, je suis preneur)

    3. Pour chaque ligne du fichier, je fais un insert de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into MaTable(ID,NOM) values ("1","Electrocardiograma");
    - Mais est-ce que je peux écrire un ID manuellement ?

    - Si je dois enregistrer l'ID automatiquement (c'est à dire j'enregistre juste le nom et l'id est généré par mysql), comment récupérer l'identifiant généré ?

    - S'il y'a des jointures entres les tables, je ne vois pas comment insérer les données aux bons emplacement!

    Mes question sont basiques, mais j'espère avoir des réponses. N'hésitez pas à me laisser des liens ou du code, je rappelle que je n'ai jamais fait du PHP/MySql, alors je stress un peu (c'est un travail que je commence demain).

    Cordialement.

  2. #2
    Membre régulier
    Avatar de titoon
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Points : 86
    Points
    86
    Par défaut
    Voici quelques pistes pour commencer...

    Citation Envoyé par kurkaine
    1. Convertir le fichier Excel en CVS (pour séparer les données d'une ligne par des ";")
    Alors là, soit tu le fais à la main sous Excel (fichier, enregistrer sous ...), soit tu peux essayer le package pear Spreadsheet_Excel_Writer (à vérifier, Excel 5 je crois... je ne l'ai utilisé que pour écrirre)
    Il y a peut-être d'autre solutions ?

    Citation Envoyé par kurkaine
    2. Je ne sais pas par quelle miracle, mais j'ouvre le fichier et je récupère chaque mot entre deux ";" (si vous avez le nom des fonctions pour récupérer une ligne d'un fichier dans une chaine de caractère et extraire une sous-chaine en fonction d'un séparateur (, je suis preneur)
    Tu peux envoyer le fichier via un formulaire en utilisant un input type="file" (voir la FAQ). Pour la lecture du fichier, jette un oeil à fgetcsv

    Citation Envoyé par kurkaine
    3. Pour chaque ligne du fichier, je fais un insert de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into MaTable(ID,NOM) values ("1","Electrocardiograma");
    - Mais est-ce que je peux écrire un ID manuellement ?

    - Si je dois enregistrer l'ID automatiquement (c'est à dire j'enregistre juste le nom et l'id est généré par mysql), comment récupérer l'identifiant généré ?
    L'idéal est d'utiliser un AUTO_INCREMENT sur la clef ID. Tu peux ensuite récupérer l'ID via mysql_insert_id

    Citation Envoyé par kurkaine
    - S'il y'a des jointures entres les tables, je ne vois pas comment insérer les données aux bons emplacement!
    C'est à dire ?

    Voili, si tu as déjà fait du c++, tu ne devrais pas trop avoir de problèmes.
    La FAQ peut t'aider, ainsi que la doc php et mysql
    Bon courage !

  3. #3
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    alors, une fois que tu as ton csv...

    deux méthodes pour l'ouvrir et en récupérer les infos :
    - fgetcsv qui est censé le faire tout seul
    - Comment traiter un fichier ligne par ligne ? puis un explode sur la chaine obtenue avec le ; comme séparateur.

    pour l'insert, tu as le choix : ou bien insérer un id à la mais (attention à ce que le champ de ta base ne soit pas en auto increment), ou s'il s'incremente tout seul, Comment connaître l'id auto_increment de mon dernier ajout ?

    Dans le cas de jointure, tu peux parfaitement soit tout enregistrer d'un coup (je te laisse regarder les cours), soit faire plusieures petites requêtes séparées (pas forcément optimal en terme de performances, mais plus lisible)

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut
    Enfer et damnation ! J'étais bien parti à comprendre l'usage de la fameuse fonction csv, mais j'ai un horrible problème. Voilà, mon fichier csv contient des lignes, et il arrive que dans une cellule j'ai un grand texte explicatif. Le pb est que ce texte contient des espaces, des tabulations, des retour à la ligne. Je pense que c'est surtout parcequ'il contient des retour à la ligne que j'ai ces pbs: à chaque retour à la ligne, j'enregistre une nouvelle ligne dans mon tableau $data. Du coup, impossible de travailler avec.


    Est-ce que finalement je peux utiliser cette fonction fgetcsv ou bien je dois me débrouiller autrement ? J'espère avoir de l'aide, je n'ai aucune piste pour l'instant, vu que mon fichier csv n'est pas exploitable.

    En fait, une solution serait de supprimer toutes les colonnes ou j'ai du texte contenant des retour à la ligne de mon fichier csv, procéder à une insertion dans la base de données et je n'ai pas encore d'idée pour insérer ensuite le texte manquant.

    Galère!!!

  5. #5
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    Et un truc comme ca ? http://sourceforge.net/docman/displa...group_id=99160

    Ca permet d'extraire des données d'un fichier excels, ca fonctionne très bien.

    J'en est fait ca :
    http://www.developpez.net/forums/sho...6&postcount=11

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/11/2007, 21h45
  2. Réponses: 6
    Dernier message: 08/12/2006, 13h07
  3. Transferer un fichier excel dans une base mysql
    Par rane dans le forum Outils
    Réponses: 3
    Dernier message: 15/11/2006, 17h47
  4. Réponses: 1
    Dernier message: 09/05/2006, 12h00
  5. Enregistrement fichier excel dans une base mysql (pas csv)
    Par morph12345 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 27/03/2006, 10h01

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