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

Bibliothèques et frameworks PHP Discussion :

Lecture d'un fichier CSV


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 38
    Points : 30
    Points
    30
    Par défaut Lecture d'un fichier CSV
    Bonjour à tous,
    j'aimerais pouvoir atteindre des données présentes dans un fichier CSV que l'utilisateur de mon site uploadrait via un formulaire afin de les manipuler.
    J'ai trouvé quelque chose qui fonctionne bien en procédural mais malheureusement, je n'arrive pas à le faire fonctionner sous cake.
    En procédural, ça donne ça :
    formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form method="post" action="test.php" enctype="multipart/form-data">
    				<input type="file" name="test" />
    				<input type="submit" value="Valider">
    			</form>
    traitement:
    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
    <?php
    $ligne = 1; // compteur de ligne
    $fic = fopen($_FILES['test']['name'], "a+");
     
    while($tab=fgetcsv($fic,1024,';'))
    {
    	$champs = count($tab);//nombre de champ dans la ligne en question
    	echo "<b> Les " . $champs . " champs de la ligne " . $ligne . " sont :</b><br />";
    	$ligne ++;
    	//affichage de chaque champ de la ligne en question
    	for($i=0; $i<$champs; $i ++)
    	{
    		echo $tab[$i] . "<br />";
    	}
    }
    ?>
    Là pas de soucis j'affiche bien tout ce que je veux ça marche. Maintenant le problème est que j'aimerais faire un peu le même genre de chose avec cake. Mais rien ne marche et je ne ais pas pourquoi. J'ai tenté cela :
    controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    class TestsController extends AppController {
    	var $uses = array('Date');
    	var $components = array('RequestHandler');
     
    	function index()
    	{	
    		$ligne = 1; // compteur de ligne
    		$fic = fopen($this->data['Tests']['historique']['name'], 'a+');
    		$this->set('fic', $fic);
    	}
    }
    ?>
    vue:
    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
    echo $this->Form->create('Tests', array('enctype' => 'multipart/form-data') );
    echo $this->Form->file('historique');
    echo $this->Form->end('Valider');
     
    if(isset($fic))
    {
    	while($tab=fgetcsv($fic,1024,';'))
    	{
    		$champs = count($tab);//nombre de champ dans la ligne en question
    		echo "<b> Les " . $champs . " champs de la ligne " . $ligne . " sont :</b><br />";
    		$ligne ++;
     
    		for($i=0; $i<$champs; $i ++)
    		{
    			echo $tab[$i];
    		}
    	}
    }
    ?>
    Est-ce que quelqu'un peut me m'aider s'il vous plait???
    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    bonjour,
    suite à mon message précédent, j'ai continué mes recherches et tests et j'arrive finalement à accéder aux données de mon fichier CSV.
    Voici ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    echo $this->Form->create('Tests', array('enctype' => 'multipart/form-data') );
    echo $this->Form->file('historique');
    echo $this->Form->end('Valider');
    ?>
    Et mon controller :
    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
    <?php
    class TestsController extends AppController {
    	var $uses = array('Date', 'Collaborateur');
    	var $components = array('RequestHandler');
     
    	function index()
    	{
    		if(isset($this->data))
    		{
    			$nom_fichier=$this->data['Tests']['historique']['tmp_name'];
    			$fic = fopen($nom_fichier, "a+");
     
    			while($tab=fgetcsv($fic,4096,';'))
    			{
    				$nom=utf8_encode($tab[0]);
    				$intitule=utf8_encode($tab[1]);
    				$organisme=utf8_encode($tab[3]);
    				$annee=$tab[2];
    				$duree=$tab[4];
     
    				$this->Collaborateur->saveField('nom',$nom);				
    			}
    		}
    	}
    Comme vous pouvez le voir, j'essaie d'enregistrer tous les collaborateurs du fichier dans ma table. Mais malheureusement ça ne fonctionne pas, le seul enregistrement est le collaborateur de la dernière ligne de mon fichier et pas les autres.
    Pour le moment j'ai testé qu'avec les collaborateurs et une fois que ca fonctionnera bien je ferai les autres.
    Avez-vous un idée de la facon dont je pourrais traiter mes données afin de les enregistrer correctement??
    Merci d'avance pour l'aide.

  3. #3
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Je ne connais pas ce framework mais je présume que si tu veux afficher le contenu, tu pourrais faire ceci :

    controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $result = array();
    while($tab=fgetcsv($fic,4096,';')){
    	$result[] = array('nom'=>utf8_encode($tab[0]),
    				'intitule'=>utf8_encode($tab[1]),
    				'organisme'=>utf8_encode($tab[3]),
    				'annee'=>$tab[2],
    				'duree'=>$tab[4]
                            );
    }
    $this->set('result', $result);
    vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($result as $ligne){
        echo 'nom : '.$ligne['nom'].'<br/>';
    }
    Je suis fervent utilisateur de PHP et de jQuery.
    Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur pour envoyer l'URL de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc…

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Merci pour ta réponse, j'ai réussi en fait je ne passais pas le bon paramètre à fgetcsv().
    Au lieu de lui passer ['name'], il fallait que je lui passe ['tmp_name'], et là ça marche.

Discussions similaires

  1. Problème de split lors d'une lecture d'un fichier csv
    Par Mawinette dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 25/03/2009, 11h48
  2. Réponses: 2
    Dernier message: 24/01/2008, 13h48
  3. Réponses: 3
    Dernier message: 03/01/2008, 12h14
  4. pb de lecture dans un fichier CSV
    Par MayOL69bg dans le forum C#
    Réponses: 3
    Dernier message: 23/05/2007, 14h21
  5. Linges sautées dans "lecture" d'un fichier .csv
    Par Mymi dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/08/2006, 20h02

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