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 les données d'un fichier CSV dans une base de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Importer les données d'un fichier CSV dans une base de données
    Bonjour,

    Je désire importer des données d'un fichier csv à partir d'un formulaire vers une base de données. Je sais que c'est possible de le faire avec par exemple phpadmin, mais je dois pouvoir le faire qu'avec une page. Et est-ce possible de lire ce qu'il a dans le fichier sans l'uploader sur le serveur? (sur le disque)

    J'ai trouvé ce code, mais il ne réussi pas à récupéré le fichier de mon disque dur et je ne vois pas trop comment l'importer. Par contre, cela fonctionne lorsque le fichier est présent sur le serveur, mais je ne peux l'uploader sur ce dernier pour compliquer le tout.

    Bref, il faut que je puisse lire un fichier csv sur mon disque dur et que les données recueillies soit envoyer vers la base de données du serveur.

    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
    <html>
    <head>
    <title>Importer un fichier texte dans une bdd MySQL</title>
    </head>
    <body>
    <h2>Importer un fichier texte dans une bdd MySQL</h2>
     
    <?
     switch($action)
     {
      /* LECTURE ET AJOUT DES DONNEES DANS LA TABLE */
       case "ajouter":
     
     /* Variables */
       $bdd = "bdd"; /* Base de données */
       $host= "localhost"; /* Hote (localhost en principe) */
       $user= "user"; /* Utilisateur */
       $pass= "pwd"; /* Mot de passe */
     
     /* Connexion bdd */
       @mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données");
       @mysql_select_db($bdd);
     
     /* On cree la table */
     if ($creertable)
      {
      $query = "CREATE TABLE $table( val1 int(4), val2 varchar(4), val3(24), val4 varchar(4) )";
      $result= MYSQL_QUERY($query);
      }
     
     /* On ouvre le fichier à importer en lecture seulement */
     if (file_exists($fichier))
         $fp = fopen("$fichier", "r");
     else
         { /* le fichier n'existe pas */
           echo "Fichier introuvable !<br>Importation stoppée.";
           exit();
         }
     
        while (!feof($fp)) /* Et Hop on importe */
        { /* Tant qu'on n'atteint pas la fin du fichier */
           $ligne = fgets($fp,4096); /* On lit une ligne */  
     
           /* On récupère les champs séparés par ; dans liste*/
           $liste = explode( ";",$ligne);  
     
           /* On assigne les variables */
           $val1 = $liste[0];
           $val2 = $liste[1];
           $val3 = $liste[2];
           $val4 =  $liste[3];
     
           /* Ajouter un nouvel enregistrement dans la table */
           $query = "INSERT INTO $table VALUES('$val1','$val2','$val3','$val4')";
           $result= MYSQL_QUERY($query);
     
           if(mysql_error())
            { /* Erreur dans la base de donnees, sûrement la table qu'il faut créer */
               print "Erreur dans la base de données : ".mysql_error();
               print "<br>Importation stoppée.";
               exit();
            }
           else /* Tout va bien */
             print "$val1 $val2 $val 3 $val4 <br>";
         }
     
         echo "<br>Importation terminée, avec succès.";
     
         /* Fermeture */
         fclose($fp);
         MYSQL_CLOSE();
     
       break;
     
     
       /* FORMULAIRE DE CHOIX D'IMPORTATION */  
     
       default:
       ?>  
       <? echo "<form method=\"post\" action=\"$PHP_SELF\">"; ?>
         Pour ajouter ton serveur il suffit de remplir ce formulaire
         <table border="0" cellspacing="0" cellpadding="3">
          <tr>
           <td>Table :</td>
           <td> <input type="text" name="table"> </td>
          </tr>
          <tr>
           <td>Fichier :</td>
           <td> <input type="file" name="fichier"> </td>
          </tr>
          <tr>
           <td>Créer table ? :</td>
           <td> <input type="checkbox" name="creertable" checked> </td>
          </tr>
          <tr>
            <td></td>  
           <td> <input type="submit" name="submit" value="Et HoP !"> </td>
          </tr>
         </table>
         <input type="hidden" name="action" value="ajouter">  
        </form>
       <?
       break;
     
       }
     
      ?>
     
    </body>
    </html>
    J'ai trouvé rien de similaire en faisant une recherche... Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Bref, il faut que je puisse lire un fichier (csv) sur mon disque dur
    Yop, tu peux t'arreter là. Impossible.

    Le serveur Web n'a pas accès aux fichiers de ton disque... normal non ?
    Google is watching you !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je sais qu'il a pas accès à mon disque dur en fonctionnement normal.

    Ce que je veux dire, c'est lorsque, je sélectionne mon fichier sur mon disque dur via la page php et que je fais envoyer, doit-il obligatoirement le sauvegarder sur le serveur avant de le lire, ou ce qu'il obtient du formulaire peut être suffisant.

    Ex: Je suis capable d'ouvrir un fichier csv dans une page php et en afficher le résultat à l'écran. Le fichier demeure sur mon disque dur, mais les données elle sont visible à l'écran. Là, je recherche la même chose, mais au lieu d'afficher le tout à l'écran, envoyer le tout directement dans la bdd. Possible?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    Points : 81
    Points
    81
    Par défaut
    Ce que je veux dire, c'est lorsque, je sélectionne mon fichier sur mon disque dur via la page php et que je fais envoyer, doit-il obligatoirement le sauvegarder sur le serveur avant de le lire
    Oui, ou du moins, il est obligé de l'uploader. Après, que tu le mettes en mémoire ou dans un fichier temporaire, cela change peu de choses...
    De toutes façon, dès que tu uploades un fichier, PHP crée un fichier temporaire pour l'y stocker, que tu peux lire (tu trouveras son nom dans le tabkleau $_POST).

    Je suis capable d'ouvrir un fichier csv dans une page php et en afficher le résultat à l'écran.
    Si tu peux l'afficher à l'écran, tu peux l'enregistrer, sauf si... tu demandes au browser d'ouvrir le fichier en local (avec un redirect file//C:/monfichier.csv par exemple). Mais ça c'est pas du jeu : tu n'es pas capable d'arfficher le .csv sur un autre client...

    Je suis capable d'ouvrir un fichier csv dans une page php et en afficher le résultat à l'écran. Le fichier demeure sur mon disque dur, mais les données elle sont visibles à l'écran
    Comment tu fais ? A mon avis, (sdauf si tu triches), tu as chargé le fichier sur ton serveur pour faire ça. Tu peux donner un code (simplifié, et quelqu'un pourra te montrer ce qu'il faut modifier.

    --
    Rom_1

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Rom_1
    Je suis capable d'ouvrir un fichier csv dans une page php et en afficher le résultat à l'écran. Le fichier demeure sur mon disque dur, mais les données elle sont visibles à l'écran
    Comment tu fais ? A mon avis, (sdauf si tu triches), tu as chargé le fichier sur ton serveur pour faire ça. Tu peux donner un code (simplifié, et quelqu'un pourra te montrer ce qu'il faut modifier.
    Le code qui me permet d'afficher le contenu à l'écran, n'est pas celui que j'avais mi en haut. Mais, fonctionnait. Le code en haut, lisait en effet que ce qui se trouvait sur le serveur.

    Finalement, ta réponse m'a permi de corriger le tout et d'unir les 2 pages que j'avais en une.

    Voici le code corrigé pour ceux qui voudraient transféré le contenu d'un fichier csv directement dans la bdd:
    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
    <html> 
    <head> 
    <title>Importer un fichier texte dans une bdd MySQL</title> 
    </head> 
    <body> 
    <h2>Importer un fichier texte dans une bdd MySQL</h2> 
     
    <?
     switch($action)
     {
      /* LECTURE ET AJOUT DES DONNEES DANS LA TABLE */
       case "ajouter":
     
     /* Variables */
       $bdd = "bdd"; /* Base de données */
       $host= "localhost"; /* Hote (localhost en principe) */
       $user= "user"; /* Utilisateur */
       $pass= "pwd"; /* Mot de passe */ 
     
     /* Connexion bdd */
       @mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données"); 
       @mysql_select_db($bdd); 
     
     /* On cree la table */
     if ($creertable)
      {
      $query = "CREATE TABLE $table( val1 int(4), val2 varchar(4), val3(24), val4 varchar(4) )"; 
      $result= MYSQL_QUERY($query);
      }
     
      /* On ouvre le fichier à importer en lecture seulement */
     $fichier = $_FILES['fichier_u']['tmp_name'];
     if (file_exists($fichier))
         $fp = fopen("$fichier", "r"); 
     else
         { /* le fichier n'existe pas */
           echo "Fichier introuvable !<br>Importation stoppée.";
           exit();
         }
     
        while (!feof($fp)) /* Et Hop on importe */
        { /* Tant qu'on n'atteint pas la fin du fichier */ 
           $ligne = fgets($fp,4096); /* On lit une ligne */  
     
           /* On récupère les champs séparés par ; dans liste*/
           $liste = explode( ";",$ligne);  
     
           /* On assigne les variables */ 
           $val1 = $liste[0];
           $val2 = $liste[1];
           $val3 = $liste[2];
           $val4 =  $liste[3]; 
     
           /* Ajouter un nouvel enregistrement dans la table */ 
           $query = "INSERT INTO $table VALUES('$val1','$val2','$val3','$val4')"; 
           $result= MYSQL_QUERY($query); 
     
           if(mysql_error())
            { /* Erreur dans la base de donnees, sûrement la table qu'il faut créer */
               print "Erreur dans la base de données : ".mysql_error();
               print "<br>Importation stoppée.";
               exit();
            } 
           else /* Tout va bien */
             print "$val1 $val2 $val 3 $val4 <br>";
         } 
     
         echo "<br>Importation terminée, avec succès."; 
     
         /* Fermeture */ 
         fclose($fp); 
         MYSQL_CLOSE(); 
     
       break;
     
     
       /* FORMULAIRE DE CHOIX D'IMPORTATION */  
     
       default: 
       ?>  
     
       <? echo "<form name='form1' method='post' action=".$_SERVER['PHP_SELF']." enctype='multipart/form-data'>"; ?>
         Pour ajouter ton serveur il suffit de remplir ce formulaire 
         <table border="0" cellspacing="0" cellpadding="3">
          <tr>
           <td>Table :</td> 
           <td> <input type="text" name="table"> </td> 
          </tr>
          <tr>
           <td>Fichier :</td> 
           <td> <input type="file" name="fichier_u"> </td> 
          </tr>
          <tr>
           <td>Créer table ? :</td> 
           <td> <input type="checkbox" name="creertable" checked> </td> 
          </tr>
          <tr>
            <td></td>  
           <td> <input type="submit" name="submit" value="Et HoP !"> </td> 
          </tr>
         </table>
         <input type="hidden" name="action" value="ajouter">  
        </form>
       <? 
       break;
     
       }
     
      ?>
     
    </body> 
    </html>
    Merci de vos réponses!

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Bonjour à tous!!

    Je souhaite utiliser la source de joueur... Mais j'ai un problème : il n'upload pas du tout mon fichier et il ne me met aucune erreur.....

    Si quelqu'un pouvait m'aider...

    merci d'avance @+ laeti

  7. #7
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    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
    <html>
    <head>
    <title> Upload</title>
    </head>
    <body>
    <?php
     
    if( isset($_POST['upload']) ) // si formulaire soumis
    {
        $content_dir = 'upload/'; // dossier où sera déplacé le fichier
     
        $tmp_file = $_FILES['fichier']['tmp_name'];
     
        if( !is_uploaded_file($tmp_file) )
        {
            exit("Le fichier est introuvable");
        }
     
        // on vérifie maintenant l'extension
        $type_file = $_FILES['fichier']['type'];
     
        if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
        {
            exit("Le fichier n'est pas une image");
        }
     
        // on copie le fichier dans le dossier de destination
        $name_file = $_FILES['fichier']['name'];
     
    	if( preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file) )
    	{
    		exit("Nom de fichier non valide");
    	}
    	else if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    	{
    		exit("Impossible de copier le fichier dans $content_dir");
    	}
     
        echo "Le fichier a bien été uploadé";
    }
     
    ?>
     
    </body>
     
    </html>
    J'espère que ça pourra t'aider

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 14
    Points : 9
    Points
    9
    Par défaut re
    bonjour ,

    j ai repris le fichier de joueur , c est pil ce qu il me faut , par contre lorsque j upload le fichier , rien ne se passe pourtant j ai bien crée la bdd
    ci joint une copie de mon fichier
    merci
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [AC-2010] Importer un fichier csv dans une base de données existante ACCESS
    Par rossy1990 dans le forum Access
    Réponses: 2
    Dernier message: 16/04/2014, 02h38
  2. [MySQL] Import de fichiers CSV dans une base de données
    Par damdam00 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/07/2010, 15h05
  3. Importer les données d'un fichier csv dans une base de données
    Par Invité dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 08/06/2010, 13h54
  4. [PHP 5.2] Importation fichier CSV dans une base de données
    Par gtraxx dans le forum Langage
    Réponses: 10
    Dernier message: 21/02/2010, 15h16
  5. Réponses: 6
    Dernier message: 18/07/2006, 20h32

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