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

Langage PHP Discussion :

importation fichier csv vers mysql par php


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 104
    Points : 71
    Points
    71
    Par défaut importation fichier csv vers mysql par php
    Bonjour, je voudrais importer un fichier csv en bdd, le problème qui se pose c'est les dates. Je les saisie au format JJ/MM/AAAA sous excel mais sous mysql c'est AAAA/MM/JJ donc il faut que j'envoie un fichier à mysql avec les dates converties.
    J'ai essayé un petit bout de code mais il reste un problème.
    je m'explique :
    mon fichier csv peut contenir plusieurs champs dates sur la meme ligne.
    je crée un fichier temporaire pour y mettre le contenu du fichier csv avec les dates converties.
    je récupère les lignes du fichier et pour chacune je cherche la date suivant l'expression régulière.
    je permute les éléments des dates et j'insère la nouvelle ligne dans le fichier temporaire.
    sauf qu'en remplacant avec ereg_replace, ça remplace chaque date trouvée par ma date convertie.

    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
    if (!($fichier_temp = fopen("Cwamp/www/xlsmagique/liste/fichier.csv","w" ))) 
    echo "Echec de l'ouverture du fichier"; 
    else 
    { 
    while(!feof($fp)) 
    { $ligne=fgets($fp, 10000); 
    $pattern = "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})"; 
    if(ereg($pattern, $ligne, $tab)) 
    { 
    $dateFR=$tab[3]."/".$tab[2]."/".$tab[1]; 
    $nouvelle=ereg_replace($pattern, $dateFR, $ligne); 
    fwrite($fichier_temp, $nouvelle); 
    } 
    } 
    }
    ensuite pour impoter le fichier je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     $query="LOAD DATA LOCAL INFILE '$chemin_fichier' 
      REPLACE INTO TABLE $nameTable
       FIELDS TERMINATED BY ';' 
       LINES TERMINATED BY '\n'";
    où je charge le fichier temporaire.
    je me retrouve donc avec des dates converties mais seulement la première date est bonne, ensuite toutes les autres ont la meme valeur que la première puisque je fais un remplacement de chaque date trouvée par ma $dateFR.
    comment faire pour remplacer chaque date par sa bonne valeur?
    merci d'avance de votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    mais sous mysql c'est AAAA/MM/JJ
    Attention c'est AAAA-MM-JJ

    Tu peux faire le remplacement dans l'expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $pattern = "#([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})#";
    while(!feof($fp)) 
    { 
    $ligne=fgets($fp, 10000); 
    $nouvelle = preg_replace($pattern, '$3-$2-$1', $ligne);
    fwrite($fichier_temp, $nouvelle);
    }
    au passage la définition de $pattern ne doit pas être dans la boucle, c'est toujours ça d'economisé sur le traitement.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expérimenté

    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
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Modifie le format de cellule dans excel avant exportation. Ce sera quand même plus simple.

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 104
    Points : 71
    Points
    71
    Par défaut
    Pour jeca, en fait j'ai modifié le code de xlsmagique donc je veux pour l'utilisateur ce soit transparent et qu'il n'ai rien à faire sauf la saisie.

    edit : merci ça marche super!

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 104
    Points : 71
    Points
    71
    Par défaut
    salut, je dérésous le sujet car je me pose une petite question, j'ai des fichiers csv qui peuvent etre très longs(plusieurs milliers de lignes), l'utilisation d'un fichier temporaire n'est il pas un peu lourd et long?y a t-il une autre solution qui serait plus propre?

Discussions similaires

  1. [XL-2010] Importer fichier CSV vers MYSQL en VBA Excel
    Par 6116d dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 17/06/2014, 16h40
  2. import d'un fichier .csv vers Mysql
    Par katebe dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 18/10/2009, 22h31
  3. [MySQL] Importation données csv vers mysql via php
    Par ariel257 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/06/2008, 16h56
  4. Importation d'un fichier .csv vers MySQL
    Par xenos dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/08/2007, 10h19
  5. [Conseil] Import de fichier CSV vers MySQL
    Par ShinJava dans le forum JDBC
    Réponses: 6
    Dernier message: 15/03/2005, 19h14

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