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 :

Importer un fichier .csv avec php et PDO


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut Importer un fichier .csv avec php et PDO
    Bonjour tout le monde,

    J'aimerai importer un fichier .csv dans un tableau contenant plusieurs champs.

    J'ai fait mon code mais ça ne fonctionne pas et je sais pas du tout pourquoi...! Ca fait plusieurs jours que je me "prend" la tête à essayer de résoudre le problème mais sans succès ...! Je pense que mon code vaut mieux qu'un grand discours

    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
    <form method="post" action="" enctype="multipart/form-data">
    <?php
     
    if(!defined('IN_INDEX')){
    exit();
    }
     
    $_SESSION['action']="module/administration/action.php";
     
    if(isset ($_POST['valideImport'])){
     
    //On ouvre le fichier à importer en lecture seule
     if (file_exists($fichier))
         $fp = fopen("$fichier", "r"); 
     else
         {
           echo "Fichier introuvable !<br>Importation stoppée."; //le fichier n'exsiste pas
           exit();
         }
     
        while (!feof($fp)) //on importe le fichier
        { 
           $ligne = fgetcsv($fp,4096);//tant qu'on est pas à la fin du fichier, on li une ligne
     
           $liste = explode( ";",$ligne); // On récupère les champs séparés par ; dans liste
     
           //On assigne les variables
           $login = $liste[0];
           $password = $liste[1];
           $nom = $liste[2]; 
           $prenom = $liste[3]; 
           $profil = $liste[4];
           $rue = $liste[5];
           $cp = $liste[6];
           $ville = $liste[7];
           $mail = $liste[8];
           $tel_fixe = $liste[9];
           $tel_portable = $liste[10];
     
           //On ajoute un nouvelle enregistrement dans la table
           $connexion->exec('INSERT INTO collaborateur (login,password,nom,prenom,profil,rue,cp,ville,mail,tel_fixe,tel_portable,site_id) VALUES ("'.$login.'","'.$password.'","'.$nom.'","'.$prenom.'","'.$profil.'","'.$rue.'","'.$cp.'","'.$ville.'","'.$mail.'","'.$tel_fixe.'","'.$tel_portable.'")');
     
           if(mysql_error())
            { 
               print "Erreur dans la base de données : ".mysql_error();
               print "<br>Importation stoppée.";
               exit();
            } 
         } 
     
         echo "<br>Importation terminée, avec succès."; 
     
         //On ferme le fichier 
         fclose($fp); 
    }
     
    ?>
    <br/>   
    Choisir le fichier ".csv" à importer :
    <br/>
    <table border="0" cellspacing="0" cellpadding="3">
    <tr>
    <td>Fichier :</td> 
    <td>
    	<input type="hidden" name="MAX_FILE_SIZE"* value="4000" />
    	<input id="fichier" type="file" name="fichier" />
    </td> 
    </tr>
    <tr>
    <td></td>  
    <td> <input type="submit" name="valideImport" value="Importer"> </td> 
    </tr>
    </table> 
    </form>
    Merci de votre aide qui m'ai à chaque fois précieuse.

  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,

    Tu n'as pas défini ton $fichier.

    Je te propose ca avec les tests adequats et sans guillemets inutiles autour des variables chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (isset($_FILES['fichier']['tmp_name']) && is_uploaded_file($_FILES['fichier']['tmp_name'])) {
    $fp = fopen($_FILES['fichier']['tmp_name'], "r");
    Si ca ne fonctionne toujours pas, dit nous-en un peu plus.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Toute d'abord merci de ta réponse sabotage.

    J'ai un peut modifier mon code mais ça ne fonctionne pas! j'ai essayé avec un switch mais rien n"y fait. Je vais vous mettre mon code complet avec mon switch en commentaire afin que vous puissiez me dire d'où viens le problème.

    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
     
    <?php
     
    if(!defined('IN_INDEX')){
    exit();
    }
     
    $_SESSION['action']="module/administration/action.php";
     
    /*switch($_POST['action']){
    	
    	case "ajouter" :*/
     
      	if(isset($_POST['valideImport'])){
     
    		//On ouvre le fichier à importer en lecture seule
    		 if (isset($_FILES['fichier']['tmp_name']) && is_uploaded_file($_FILES['fichier']['tmp_name'])) {
    		$fp = fopen($_FILES['fichier']['tmp_name'], "r"); 
     
    		 }
     
     
    		    while (!feof($fp)) //on importe le fichier
    		    { 
    		       $ligne = fgets($fp,4096);//tant qu'on est pas à la fin du fichier, on li une ligne
     
    		       $liste = explode( ";",$ligne); // On récupère les champs séparés par ; dans liste
     
    		       //On assigne les variables
    		       $login = $liste[0];
    		       $password = $liste[1];
    		       $nom = $liste[2]; 
    		       $prenom = $liste[3]; 
    		       $profil = $liste[4];
    		       $rue = $liste[5];
    		       $cp = $liste[6];
    		       $ville = $liste[7];
    		       $mail = $liste[8];
    		       $tel_fixe = $liste[9];
    		       $tel_portable = $liste[10];
     
    		       //On ajoute un nouvelle enregistrement dans la table
    		       $connexion->exec('INSERT INTO collaborateur (login,password,nom,prenom,profil,rue,cp,ville,mail,tel_fixe,tel_portable,site_id) VALUES ("'.$login.'","'.$password.'","'.$nom.'","'.$prenom.'","'.$profil.'","'.$rue.'","'.$cp.'","'.$ville.'","'.$mail.'","'.$tel_fixe.'","'.$tel_portable.'")');
    		    } 
     
     
     
    		     echo "<br>Importation terminée, avec succès."; 
     
    		     //On ferme le fichier 
    		     fclose($fp); 
      	  	}
     
         //break;
     
         //default:
     
    ?>
     
    	<?php echo "<form method=\"post\" action=\"$PHP_SELF\" enctype=\"multipart/form-data\">"; ?>
    <br/>   
    Choisir le fichier ".csv" à importer :
    <br/>
    <table border="0" cellspacing="0" cellpadding="3">
    <tr>
    <td>Fichier :</td> 
    <td>
    	<input type="hidden" name="MAX_FILE_SIZE"* value="4000" />
    	<input id="fichier" type="file" name="fichier" />
    </td> 
    </tr>
    <tr>
    <td></td>  
    <td> <input type="submit" value="Importer" name="valideImport" > </td> 
    </tr>
    </table> 
    <input type="hidden" name="action" value="ajouter">
    </form>
    <?php
    //break;
     
    //}
    ?>
    Merci de votre aide car j'aimerai vraiment que mon csv fonctionne j'en ai vraiment besoin

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

    Tu n'as pas mieux precisé le probleme que tu rencontrais.
    Qu'est ce qui se passe de ton côté ?

    Je te propose de regarder du côté des erreurs d'upload en les prenant en charge dans ton script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if ($_FILES['nom_du_fichier']['error'] != '') {
      die('Erreur d\'upload : ' . $_FILES['nom_du_fichier']['error']);
    }
    elseif (isset($_FILES['fichier']['tmp_name']) && is_uploaded_file($_FILES['fichier']['tmp_name'])) {
    		$fp = fopen($_FILES['fichier']['tmp_name'], "r");
                    // suite du traitement
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Il ne me detecte aucune erreur c'est étonnant. Enfaite je vais chercher mon fichier test.csv sur mon bureau. Je clique sur importer et là, il me redirige vers ma page où il y a mon tableau mais il ne m'insert pas mes donnée contenu dans test.csv... ! J'ai l'impression qu'il ne prend pas en compte ma requête! Il rentre bien dans mon if(isset($_POST['valideImport'])) pourtant....! Là je vois vraiment pas car pour moi ma requête insert into est bonne

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    petite précision :

    J'ai récupéré mes variables et il va bien chercher dans mon fichier test.csv les colonnes qui correspondent....! c'est surement ma requête mais je comprend pas pourquoi...! merci de votre aide

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    C'est bon j'ai reussi..... !! un erreur toute bête j'ai laisser une variable en trop dans ma requête...!

    Voici mon code pour ceux qui voudrait s'en servir car importer un csv avec PDO j'ai pas trouvé sur le net!

    @Sabotage : merci pour ton aide !!!!!!!!!!

    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
     
    <?php
     
    if(!defined('IN_INDEX')){
    exit();
    }
     
    $_SESSION['action']="module/administration/action.php";
     
    switch($_POST['action']){
     
    	case "ajouter" :
     
      	if(isset($_POST['valideImport'])){
     
    		//On ouvre le fichier à importer en lecture seule
     
    		if (isset($_FILES['fichier']['tmp_name']) && is_uploaded_file($_FILES['fichier']['tmp_name'])) {
    			$fp = fopen($_FILES['fichier']['tmp_name'], "r");
     
     
    		 }
     
     
     
    		    while (!feof($fp)) //on importe le fichier
    		    { 
    		       $ligne = fgets($fp,4096);//tant qu'on est pas à la fin du fichier, on li une ligne
     
    		       $liste = explode( ";",$ligne); // On récupère les champs séparés par ; dans liste
     
    		       //On assigne les variables
    		       $login = $liste[0];
    		       $password = $liste[1];
    		       $nom = $liste[2]; 
    		       $prenom = $liste[3]; 
    		       $profil = $liste[4];
    		       $rue = $liste[5];
    		       $cp = $liste[6];
    		       $ville = $liste[7];
    		       $mail = $liste[8];
    		       $tel_fixe = $liste[9];
    		       $tel_portable = $liste[10];
     
     
    		       //On ajoute un nouvelle enregistrement dans la table
    		       $connexion->exec('INSERT INTO collaborateur (login,password,nom,prenom,profil,rue,cp,ville,mail,tel_fixe,tel_portable) VALUES ("'.$login.'","'.$password.'","'.$nom.'","'.$prenom.'","'.$profil.'","'.$rue.'","'.$cp.'","'.$ville.'","'.$mail.'","'.$tel_fixe.'","'.$tel_portable.'")');
    		    } 
     
     
     
    		     echo "<br>Importation terminée, avec succès."; 
     
    		     //On ferme le fichier 
    		     fclose($fp); 
      	  	}
     
         break;
     
         default:
     
    ?>
     
    	<?php echo "<form method=\"post\" action=\"$PHP_SELF\" enctype=\"multipart/form-data\">"; ?>
    <br/>   
    Choisir le fichier ".csv" à importer :
    <br/>
    <table border="0" cellspacing="0" cellpadding="3">
    <tr>
    <td>Fichier :</td> 
    <td>
    	<input type="hidden" name="MAX_FILE_SIZE"* value="4000" />
    	<input id="fichier" type="file" name="fichier" />
    </td> 
    </tr>
    <tr>
    <td></td>  
    <td> <input type="submit" value="Importer" name="valideImport" > </td> 
    </tr>
    </table> 
    <input type="hidden" name="action" value="ajouter">
    </form>
    <?php
    break;
     
    }
    ?>

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

Discussions similaires

  1. [MySQL] importation fichier CSV avec php et mysql
    Par NapsterVB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/10/2013, 10h01
  2. [EasyPHP] importer un fichier CSV avec phpMyAdmin
    Par K.aoutar dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 16/08/2010, 19h10
  3. [1.x] Créer un fichier csv avec PHP-excel-reader
    Par blasil64 dans le forum Symfony
    Réponses: 2
    Dernier message: 21/05/2010, 09h46
  4. crer un fichier csv avec php
    Par Jerem38 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 17/06/2009, 16h41
  5. Importer 1 Fichier CSV avec des ";" dans les champs
    Par opaillon dans le forum Import/Export
    Réponses: 3
    Dernier message: 15/01/2009, 14h23

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