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 :

Remplissage d'une table d'une base de données à partir d'un fichier CSV [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 72
    Points : 54
    Points
    54
    Par défaut Remplissage d'une table d'une base de données à partir d'un fichier CSV
    Bonjour


    Je veux créer un bouton qui permet de sélectionner un fichier d'extension .csv et importer l'importation des informations qui les contient pour remplir une base de donnée.

    avez vous une idée qui peut me servir?

  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
    Bonjour,

    Quels elements te bloquent pour réaliser tout cela ?
    Les 3 étapes sont basiques :
    - upload d'un fichier
    - lecture d'un csv
    - insertion dans une bdd

  3. #3
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 72
    Points : 54
    Points
    54
    Par défaut
    Concernant l'upload j'ai utiliser les instruction suivantes:


    <form action="ajouter.php" method="post" enctype="multipart/form-data" name="form1">


    <p><input type="file" name="file" /></p>

    <input type="submit" name="Submit" value="Submit">
    </form>

    qui me permet de selectionner mon csv pour le traiter dans une autre page

    mais maintenant je suis bloqué dans la lecture du d'un csv et l'insertion dans une base base donnée.
    pouvez vous m'aider?

  4. #4
    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
    Quels elements te bloquent ?
    Il a moult sujet concernant les csv sur le forum et egalement des exemples dans la documentation PHP.

  5. #5
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 72
    Points : 54
    Points
    54
    Par défaut
    je veux savoir comment récupérer les données d'un fichier csv et les insérer dans une base de donnée Mysql et je ne sais pas comment.
    j'ai pas trouvé les instructions qui peuvent me donner la résultat voulu
    pouvez vous m'aider?

  6. #6
    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
    Montre nous ce que tu as fais, et nous pourrons t'aider a le corriger.

  7. #7
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 72
    Points : 54
    Points
    54
    Par défaut
    Merci pour votre intérêt de mon problème
    voila le code que j'ai fait pour le moment:
    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
     
    <?php
    require("config.php");
    // 1. Connexion au SGBD MySQL
    	mysql_connect(localhost, $username, $password);
    	mysql_select_db("dev_facturation");	
    if (isset($_FILES['file'])) {
    $file = $_FILES['file']['tmp_name'];
    $handle = fopen($file,'r');
    $row = 1;
    $handle = fopen("$file", "r");
    while (($data = fgetcsv($handle, 4096, ",",'"')) !== FALSE) {
     
     
    //recuperer les données et les stoker dans la base de donnée
     
     
     
    fclose($handle);
    ?>

  8. #8
    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
    Quel probleme rencontres-tu sur cette partie ?

  9. #9
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 72
    Points : 54
    Points
    54
    Par défaut
    comment je peut faire la distinction entre les différents champs ,les récupérer et les stoker dans la base de donnée?

  10. #10
    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
    Pour la lecture des champs csv, tu as un exemple dans la documentation de PHP.

  11. #11
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 72
    Points : 54
    Points
    54
    Par défaut
    bonjour

    Voila mon nouveau 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
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
    // 1. Connexion au SGBD MySQL
    require("config.php");
     
    // 1. Connexion au SGBD MySQL
    	mysql_connect($dbhost, $dbuser, $dbpasswd);
    	mysql_select_db($db_clients);
    if (isset($_FILES['file'])) {
    $file = $_FILES['file']['tmp_name'];
    $handle = fopen($file,'r');
    $row = 1;
    $req1=mysql_query("DELETE FROM `clients`");
    while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {
    $num = count($data);
     
    $donnee="'".$data[0]."'";
    for ($c=1; $c < $num; $c++) { 
    if($c==3 || $c==6 || $c==15 || $c==25)
    {
    $donnee=$donnee.",".$data[$c];
    }
    else{
    $donnee=$donnee.",'".$data[$c]."'";
    }
    }
     
    $req = mysql_query("INSERT INTO `clients` VALUES(".$donnee.")" );
     
    }
    //$handle = fopen("$file", "r");
    fclose($handle);
    mysql_close();
    }
    else{
    echo "erreur au niveau de l'importation du fichier"; 
    }		
    ?>
    mais les information ne sont pas insérer dans le tableau le tableau reste vide



    pouvez vous m'aider?

    je veux savoir s'il y a des type entier dans la table ça me gène dans le remplisage?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 195
    Points : 77
    Points
    77
    Par défaut CSV vers mysql
    Voici le code que j'ai adapté après pas mal de déboires et ceci grace à ce forum:
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    <?php 
    ////include ("inc/prive.inc.php");
    include("haut.inc.php");
    include ("inc/fonctions.inc.php");
    ////include ("config/constantes.inc.php");
    Normalisation();
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
      <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
      <title>Gestion de l'importation des données de Sconet</title>
    <a href="index.php">****Accueil Général de la Gestion ****</a>
        <script language="javascript" type="text/javascript" src="inc/fonctions.js">
      </script>
    </head>
    <body>
    <?php
    // autorisations pour la page
    ////autoriser ("admin");
    // menu
    //require ("inc/menu.inc.php");
    ?>
    <div id="texte">
    <h2>Importation du fichier CSV de Sconet, cette importation est longue, veuillez patienter</h2>
    <?php
    $mode = isset($_POST['mode']) ? $_POST['mode'] : Null;
     
    switch ($mode)
     {
     case 'Confirmer': 
    	// ouvrir la BD
    	include ("variables.inc.php");
    	$lienDB = mysql_connect($bddserver, $bddlogin, $bddpassword);
    	mysql_select_db ($bdd);
    			//Vide la table 'nom_de_la_table'
    	$query = "DELETE FROM elevescomplete";
    	$result = mysql_query($query);
    	echo $query;
    	$handle = fopen("./eleves.csv", "r");
    	$ligne = 1;
     
    	while (($data = fgetcsv($handle, 5000, ";","\"")) !== FALSE) 
    		{
    		$num = count($data);
    		if ($ligne == 1)
    			{
    			// sur la première ligne, on trouve les intitulés des colonnes
     
     
    			$debutsql = "INSERT INTO elevescomplete (";
    			for ($i=0; $i < $num; $i++) 
    				{
    				$debutsql .= "`$data[$i]";
    				if ($i < $num-1) $debutsql .= "`,";
    				}
    			$debutsql .= "`) VALUES (";
    			}
    			else
    			{
    			// sur les lignes suivantes, on trouve les infos à introduire dans la BD
    			$sql = $debutsql;
    			for ($i=0; $i < $num; $i++) 
    				{
    				$sql .= "'".mysql_real_escape_string($data[$i])."'";
    				if ($i < $num-1) $sql .= ","; else $sql .= ");";
    				}
    			mysql_query($sql);
    			if (mysql_error()) 
    				{ 
    				echo mysql_error() ."<br>\n";  
    				$erreur = true;
    				}
    			}
    			$ligne++;
    			//echo "$sql <br />";
    			//mysql_query($sql);
     
    		}
            echo "L'importation des données semble s'être bien passée.";
    		fclose($handle);
    		mysql_close ($lienDB);
            if ($erreur == false)
    			{
    			$texte = "L'importation des données semble s'être bien passée.";
    			//redir ("index.php","",$texte, 5000);
                }
    			else 
    			{
    			$texte = "Il s'est produit une erreur durant l'importation.";
    			//redir ("index.php","",$texte, 10000);
    			}
     break;
     case 'Envoyer':
    	// recopie du fichier sous un nom définitif
    	$nomTemporaire = $_FILES['fichierCSV']['tmp_name'];
    	if( !move_uploaded_file($nomTemporaire, "./eleves.csv") )
    		exit("Impossible de copier le fichier.");
     
    		echo "<div style=\"text-align: center\">\n";
            echo "<form name=\"form1\" method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">\n";
            echo "<p>Le fichier CSV a été copié sur le serveur.</p>\n";
            echo "<p>Veuillez confirmer l'exportation des données.</p>\n";
    		echo "<p>\n<input type=\"reset\" name=\"submit\" value=\"Annuler\"";
    		echo "onclick=\"javascript:history.go(-1)\">\n";
            echo "<input type=\"submit\" value=\"Confirmer\" name=\"mode\"></p>\n";
            echo "</form>\n";
            echo "</div>\n";
     
    	// tableau de prévisualisation
    	echo "<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\">\n";
    	$handle = fopen("./eleves.csv", "r");
    	//while (($data = fgetcsv($handle, 5000, ",","\"")) !== FALSE) 
    	while (($data = fgetcsv($handle, 5000, ";","\"")) !== FALSE) 
    		{
    		$num = count($data);
    		echo "<tr>\n";
    		for ($i=0; $i < $num; $i++) 
    			echo "<td>".$data[$i] . "</td>\n";
    		echo "</tr>\n";
    		}
    	fclose($handle);
    	echo "</table>\n";
    	break;
     default:
    	echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\" ";
    	echo "name=\"form1\" enctype=\"multipart/form-data\">\n";
    	echo "<input name=\"fichierCSV\" type=\"file\">\n";
    	echo "<input name=\"mode\" value=\"Envoyer\" type=\"submit\">\n";
    	echo "</form>\n";
     break;
     }
    ?>
    </div>
     
    </body>
    </html>

  13. #13
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 72
    Points : 54
    Points
    54
    Par défaut
    Merci pasbonte pour votre aide mais j'ai le même souci même avec ton code!!
    est ce que les type des champs intervient dans la requête puis ce que j'ai des champs de type int?
    parceque j'ai obtenue le message suivant:Column count doesn't match value count at row 1

    sachant que mon code est:

    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
    <?
    require("config.php");
    $db=mysql_connect($dbhost, $dbuser, $dbpasswd);
    if (!$db)
    	{
    		echo "Probleme de connexion avec MySQL !</body></html>";
    		exit;
    	}
    	mysql_select_db($db_clients,$db);
     
     
     
    if (isset($_FILES['file'])) {
    $file = $_FILES['file']['tmp_name'];
    $handle = fopen($file,'r');
    //$row = 1;
    $handle = fopen("$file", "r");
    $req1=mysql_query("TRUNCATE TABLE clients");
    while (($data = fgetcsv($handle, 0,",")) !== FALSE) {
    $num = count($data);
    $champs="'".$data[0]."'";
    for ($c=1; $c < $num; $c++) {
    $champs=$champs.",'".$data[$c]."'";
    }
    $req=mysql_query("INSERT INTO clients VALUES(".$champs.")") OR die(mysql_error());
    }
    }
    else
    {echo "error lors de l'importation du fichier";
    }
    ?>

  14. #14
    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,

    Le message d'erreur signifie que le nombre de valeur que tu essaies d'insérer ne correspond pas au nombre de colonnes de la table.

  15. #15
    Membre du Club
    Inscrit en
    Février 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 72
    Points : 54
    Points
    54
    Par défaut
    merci pour votre aide

    j'ai modifier la struture de ma table pour qui soit compatble avec les données du fichier csv et c'est bon ça marche


    merci pour votre aide

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  3. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  4. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  5. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50

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