Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
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 09/01/2012, 17h21   #1
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
Par défaut téléchargement d'un fichier

Bonjour à tous!

Comment permettre à un utilisateur un téléchargement d'un fichier de type .csv en clickant sur une icon (lien)?

En fait j'ai pu créé le lien et laction qui va avec. Quand je click sur le lien l'action s’exécute mais j'ai pas la boite de dialogue qui devait me proposée le téléchargement du fichier?

voici le bout de code concerné :

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
25
 
// la variable qui va contenir les données CSV
		$outputCsv = '';
		// Nom du fichier final
		$file = 'export-file.csv';
 
		$outputCsv .= "nom".';';
		$outputCsv .= "prnom".';';
		$outputCsv .= "mail".';';
		foreach($listUsers as $user) {
			$outputCsv .= trim($transactions->getNom()).';';
			$outputCsv .= trim($transactions->getPrenom()).';';
			$outputCsv .= trim($transactions->getMail()).';';
		}
		$fp=fopen($file, "w");
		fputs($fp, $outputCsv);
		fclose($fp);
		header("Content-Type: application/force-download" );
		header("Content-Length: ".filesize($file));
		header("Content-Disposition: attachment; filename=".$file);
		header("Content-Transfer-Encoding: csv\n");
		header("Pragma: no-cache"); 
		header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
		header("Expires: 0"); 
		readfile($file);
Merci d'avence!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 17h34   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
déjà utilise fputcsv, ensuite la plu part de tes entêtes sont inutiles, ca ressemble a du copier coller, et ton Content-Transfer-Encoding est faux
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 18h33   #3
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
et il te manque le pour ne pas chercher à prendre un ton layout et ton template.
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 18h55   #4
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
Merci pour vos réponses!

la méthode fputcsv prend bien un une liste de array un table de tables c'est exactement ce que je veux, seulement, dans mon cas le nombre de tableaux dans ma liste de tableaux pas fixe et peut varier!!! alors comment on créée un une liste de tableaux dynamiquement? ou si vous avez une autre solution je suis preneur
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 19h14   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
dans ton cas c'est fixe puisque il y'a 3 champs
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 19h15   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
Code :
1
2
3
4
5
6
7
8
9
foreach($listUsers as $user) {
    $outputCsv = fputcsv($handle,
        array(
            $transactions->getNom(),
	    $transactions->getPrenom(),
	    $transactions->getMail()
        ), ';'
    )
}
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 09h46   #7
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
Merci stealth35!

j'ai créé "cette boucle" hier soir mais je sais pas comment faire le reste...
par exemple $handle ça va être quoi comme variable et prends quoi comme valeur?
aussi pour $outputCsv c'est la variable ou chaine de caractère que je devais mettre dans le fichier... mais comment permettre ou forcer le téléchargement?

Merci d'avance!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 09h54   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
suffit de bien lire la doc, tout est dedans
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h13   #9
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
voici mon code actuellement :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
                $outputCsv = '';
		// Nom du fichier final
		$file = 'mofichier.csv';
 
		$theader = array('Nom', 'Prenom', 'Mail');
		$fp=fopen($file, "w");
		$outputCsv .= fputcsv($fp, $theader);
 
		foreach($listUsers as $user) {
		       $tbody = array($user->getNom(), $user->getPrenom(), $user->getMail());
		       $outputCsv .= fputcsv($fp,$tbody);
		}
 
		fputs($fp, $outputCsv);
                sfView::NONE;
mais ça ne marche pas... et j'ai cette erreur :

Code :
1
2
 
The template "DownloadCSVFileSuccess.php" does not exist or is unreadable in "".
sachant que DownloadCSVFile est nom de la méthode (action) où ce trouve le bout de code en haut.
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h16   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
juste

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
$file = 'mofichier.csv';
$theader = array('Nom', 'Prenom', 'Mail');
 
$fp=fopen($file, "w");
fputcsv($fp, $theader);
 
foreach($listUsers as $user) {
    $tbody = array($user->getNom(), $user->getPrenom(), $user->getMail());
    fputcsv($fp,$tbody);
}
 
rewind($fp);
fpassthru($fp);
fputcsv ne renvoie pas une chaine mais écrit du csv comme fputs
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h29   #11
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
j'ai toujours malheureusement cette erreur!!!!

Code :
1
2
 
The template "DownloadCSVFileSuccess.php" does not exist or is unreadable in "".
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h39   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
fait une vue classique sans header particulier, ton CSV devrai s'afficher dans le navigateur
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h44   #13
Membre chevronné
 
Avatar de kenny.kev
 
Homme
Inscription : janvier 2007
Messages : 575
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 575
Points : 690
Points : 690
Envoyer un message via MSN à kenny.kev
je crois qu'il faut faire un pas que Si tu crée ce template ton aussi aussi le template écrit dedans ou bien tu afficheras juste le template.
kenny.kev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h50   #14
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
dsl j'ai pas compris ta question!!
en fait mon souhait c'est que l'utilisateur reste sur la même page qui lui affiche la liste courante des users en téléchargeant et enregistrant le fichier csv.
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 11h07   #15
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
En fait quand je mets

l'application se bloc et m'affiche une page blanche avec les élément de la bare de menu symfony d'ésordonné sur le côté droit!!!
par contre si je fais $this->redirect('@users'); là ça m'affiche la liste des users mais pas le téléchargement de fichier csv????
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 11h16   #16
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
en plus de

me retourne 0????? ce qui veux dire qu'aucun caractère n'a été lu????
avez vous plus d'explications s'il vous plait?

Merc.
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 11h17   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
bizarre, si tu fais :

Code :
$fp=fopen('php://output', "w");
ça sort bien ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 11h36   #18
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
avec cette ligne il me sort tout dans la page avec un warning :

Code :
1
2
 
Warning: rewind() [function.rewind]: stream does not support seeking in D:\developpement\sfprojects\Frontal2\apps\backend\modules\transactions\actions\actions.class.php on line 80
et la ligne 80 en question c'est bien cette fonction :

aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 11h38   #19
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
commente les deux, rewind et fpasstru
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 11h53   #20
Invité de passage
 
Inscription : février 2007
Messages : 82
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 82
Points : 4
Points : 4
là pas de warning et il me balance tout sur la page avec en bas la bare de menu de debug de symfony en désordre!!!!
aza806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h18.


 
 
 
 
Partenaires

Hébergement Web