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 :

Importer csv en PHP dans BDD. [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut Importer csv en PHP dans BDD.
    Bonjour,

    Je cherche à importer un fichier CSV (créé avec Excel) directement dans ma base MySQL depuis une page web de mon site, mais pas moyen de comprendre le principe !

    Je suis tombé sur cette fonction en cherchant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
      FIELDS TERMINATED BY ',' ENCLOSED BY '"'
      LINES TERMINATED BY '\n';
    Mon csv se présente comme ceci (les 4 première ligne) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (données supprimées par le forum, vous devriez faire attention de ne pas mettre de données réelle en ligne)
    Moi ça se présenterai plus de la façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LOAD DATA INFILE 'fichier.csv' INTO TABLE histo
      FIELDS TERMINATED BY ';' ENCLOSED BY ''
      LINES TERMINATED BY '\n';
    Comment puis-je integrer ça dans une page en php ?

    Merci d'avance !

  2. #2
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    J'ai trouvé comment faire !

    Voici mon code pour ceux que ça intéresse

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?php
    	if(isset($_FILES['csv']))
    	{ 
    		 $dossier = 'upload/';
    		 $fichier = basename($_FILES['csv']['name']);
    		 if(move_uploaded_file($_FILES['csv']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
    		 {
    			  echo "Upload du fichier effectué avec succès !";
    		 }
    		 else //Sinon (la fonction renvoie FALSE).
    		 {
    			  echo "Echec de l\'upload !";
    		 }
    	}
     
    	echo "<br>Chemin du fichier : upload/".$_FILES['csv']['name']."<br><br>Resultat Import SQL : <br>";
     
    	mysql_connect('localhost', 'root', '');
    	mysql_select_db('xls_db');
    	mysql_query("SET NAMES UTF8");
     
    	//Le chemin d'acces a ton fichier sur le serveur
    	$fichier = fopen("upload/".$_FILES['csv']['name'], "r");
     
    	//tant qu'on est pas a la fin du fichier :
    	while (!feof($fichier))
    	{
    	// On recupere toute la ligne
    	$uneLigne = addslashes(fgets($fichier));
    	//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 IGNORE INTO histo VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."', '".$tableauValeurs[4]."', '".$tableauValeurs[5]."', '".$tableauValeurs[6]."', '".$tableauValeurs[7]."')";
     
    	$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 "<h2>Ajout dans la base de données effectué avec succès</h2>";
    	}
    	else
    	{
    	echo "Echec dans l'ajout dans la base de données";
    	}
    ?>

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Ah merci pour l'info, pratique, je vais la tester dès lundi

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut MERCI
    Je viens de tester ton script et c'est juste parfait. MERCI

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Vatican

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2004
    Messages : 144
    Points : 238
    Points
    238
    Par défaut
    Bonjour,

    j'avais rencontré le même problème que toi. à partir d'un fichier php le load data infile posait problème quand tu essaie d'éxectuer à partir de mysql_query.

    Ta méthode par le php est bonne mais essaies d'imaginer un fichier csv de 30 Mo...
    une autre méthode consiste à lancer une commande via php sur le serveur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $nom_fichier1=le_nom_de_ton_fichier;
    $commande="mysql -u root -TONPASS -e 'LOAD DATA LOCAL INFILE \"/TONCHEMIN/".$nom_fichier1."\" INTO TABLE TA_TABLE FIELDS TERMINATED BY \";\" IGNORE 1 LINES (CHAMP1,CHAMP2,...,CHAMP_N)' TA_BDD;";
    exec($commande);
    .
    . . Savoir, savoir faire, faire , faire savoir...

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

Discussions similaires

  1. Pb import CSV en PHP ou MySQL
    Par Korben-Dallas dans le forum Administration
    Réponses: 18
    Dernier message: 13/03/2012, 18h25
  2. Importation de fichier excel dans BDD
    Par elaene dans le forum Langage
    Réponses: 15
    Dernier message: 06/05/2011, 12h28
  3. import CSV avec encodage dans la foulée
    Par benoitXV dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 10/12/2008, 13h07
  4. [ODBC] Enregister panier PHP dans BDD
    Par ju0123456789 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/10/2008, 17h49
  5. [MySQL] Variable php dans BDD mySql
    Par onirisme dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/11/2007, 14h12

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