Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > CakePHP
CakePHP Forum d'entraide sur le framework PHP CakePHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2011, 11h12   #1
Invité de passage
 
Homme thibault Berthier
Développeur Web
Inscription : juillet 2011
Messages : 24
Détails du profil
Informations personnelles :
Nom : Homme thibault Berthier
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : juillet 2011
Messages : 24
Points : 1
Points : 1
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 :
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 :
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 :
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 :
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.
Tybaal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 10h28   #2
Invité de passage
 
Homme thibault Berthier
Développeur Web
Inscription : juillet 2011
Messages : 24
Détails du profil
Informations personnelles :
Nom : Homme thibault Berthier
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : juillet 2011
Messages : 24
Points : 1
Points : 1
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 :
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 :
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.
Tybaal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 11h01   #3
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Je ne connais pas ce framework mais je présume que si tu veux afficher le contenu, tu pourrais faire ceci :

controller:
Code :
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 :
1
2
3
foreach($result as $ligne){
    echo 'nom : '.$ligne['nom'].'<br/>';
}
__________________
Membre de StackOverflow, je suis un fervant 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 mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet 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...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/07/2011, 10h16   #4
Invité de passage
 
Homme thibault Berthier
Développeur Web
Inscription : juillet 2011
Messages : 24
Détails du profil
Informations personnelles :
Nom : Homme thibault Berthier
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : juillet 2011
Messages : 24
Points : 1
Points : 1
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.
Tybaal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h20.


 
 
 
 
Partenaires

Hébergement Web