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 :

Script d'importation automatique de CSV vers BDD [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 90
    Par défaut Script d'importation automatique de CSV vers BDD
    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!

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 90
    Par défaut
    personne n'a d'idée ?? quelqun pourait-il m'aider se serait très aimable !!!
    s'il vou plait à l'aide !!

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Je ne vois pas vraiment où est ton problème.
    Tu fais un formulaire avec un "input" de type "file" pour l'upload du fichier ; après les contrôles de rigueur et l'upload effectif du fichier sur le serveur, tu enchaînes par l'importation dans la table concernée.
    Si les champs du CSV correspondent aux colonnes de la table, tu peux utiliser directement le sql avec "LOAD DATA INFILE..." (voir manuel de référence mysql : ici), sinon tu fais à la mimine pour lire les lignes du fichier et établir la corrélation entre les champs et les colonnes.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 90
    Par défaut
    c'est bon jai répondu toute seule a ma question
    si certain ca les intéressse je vous laiise mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    //ne pas oublié l'ouverture de la base et connection !!
     
    //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";
    	}
     
    ?>

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Par défaut
    La réponse de jeca est beaucoup plus simple et le traitement sera beaucoup plus rapide.

    Il faut que tu créer un formulaire avec comme champs un type='file' .

    Puis une fois le fichier envoyer tu le traites avec 'LOAD DATA INFILE' qui est spécialement adapté pour l'intégration dans une bdd d'un fichier type csv (la dessus recherche sur google des infos)

    La durée de traitement sera bien plus rapide.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        // 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]."')";
    peut être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        //On met dans un tableau les differentes valeurs trouvés (ici séparées par un ';') 
        $tableauValeurs = fgetcsv($fichier, 1024, ';');
        $values = '\'' . implode('\', \'', $tableauValeurs) . '\'';
        $sql = 'INSERT INTO Balance 
                VALUES (' . $values . ')';
    Ceci est inutile, car s'il y a problème avec la requête, le "die" arrêtera l'éxécution du programme ; donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          or die (mysql_error() . '<br>Echec dans l\'ajout dans la base de données');
    Cela dit, si c'est possible, je privilégie "'LOAD DATA INFILE..." qui est 10 à 20 fois plus rapide que tout ce qui peut être codé manuellement, avec seulement une requête.

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 90
    Par défaut
    je suis bien daccord avec vous que le "LOAD DATA INFILE..." est beaucoup plus rapide mais j'ai essayé plusieur fois de le mettre en place et je ne comprend vraiment pas du tout, ils expliquent vraiment mal sur les sites !!!
    bref si vous voulez bien m'aider a faire avec cette méthode je veu bien parce que c'est vrai que dans certains cas c'est à dire pas mal de fois j'aurai a rentrer plus de 3500 ligne dans une même table alors si ça peut être plus rapide c'est sur que c'est mieux.

    je vous remercie. j'attend vos postes.

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Citation Envoyé par jeinny Voir le message
    ...j'ai essayé plusieur fois de le mettre en place et je ne comprend vraiment pas du tout...
    Il n'y a pas grand'chose à comprendre. Il suffit de lire la page dont je t'ai donné le lien. Toute la syntaxe est indiquée. Ensuite, tu fais des essais, et tu poste ton code.

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 90
    Par défaut
    Bonjour,

    Voici le code qe j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    //connexion au serveur MySQL
    $connexion = mysql_connect("localhost","root","") or die ("Connexion impossible au SGBD.");
    //sélection de la BDD
    $base = mysql_selectdb("LaMoulinetteCACE", $connexion) or die ("Sélection de la base impossible.");
     
    	//vide la table balance avant toute insertion
    	$req="TRUNCATE TABLE Balance"; 
    	mysql_query($req)or die (mysql_error()); 
     
    $sql='LOAD DATA LOCAL INFILE "Balance.csv" REPLACE INTO TABLE Balance FIELDS TERMINATED BY ";"';
    $rs=mysql_query($sql)or die (mysql_error());
     
    //vérifie et envoi une réponse à l'utilisateur
    	if ($rs)
    	{
    		echo"Ajout dans la base de données effectué avec succès";
    	}
    	else 
    	{
    		echo"Echec dans l'ajout dans la base de données";
    	}
     
    ?><html><body>
    <center><input type="submit" value="Importer les comptes nouveaux qui étaient dans la balance"></center>
    </form>
    </body></html>
    et voici l'erreur qu j'ai :

    " File 'Balance.csv' not found (Errcode: 2) "

    merci de m'aider!!

  10. #10
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 90
    Par défaut
    c'est bon j'y suis arrivé il fallait que j'enlève "LOCAL" et que je le mette dans le bon dossier qui est "C:\wamp\mysql\data\lamoulinettecace"

  11. #11
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    104
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 104
    Par défaut
    ça va en local mais fais attention sur serveur car tu pourrais avoir des surprises avec des problèmes de droits sur les fichiers du serveur

  12. #12
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 90
    Par défaut
    et si un jour ça m'arrive que j'ai des problème comme sa comment devrais-je faire ???

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

Discussions similaires

  1. [MySQL] Importer des fichiers .CSV dans BDD automatiquement
    Par Caypamoi dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/04/2015, 15h20
  2. [AC-2003] importation automatique fichiers csv vers access
    Par biquet52 dans le forum VBA Access
    Réponses: 3
    Dernier message: 24/03/2010, 16h32
  3. Importation de type CSV vers Oracle8i
    Par gamma dans le forum Oracle
    Réponses: 27
    Dernier message: 18/10/2006, 16h44
  4. [Conseil] Import de fichier CSV vers MySQL
    Par ShinJava dans le forum JDBC
    Réponses: 6
    Dernier message: 15/03/2005, 19h14
  5. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 15h18

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