export CSV : fichier contenant html

d0m
Mammouth du PHP | 1141 Messages

17 juin 2010, 12:30

Bonjour,

j'ai un petit problème pour un export en CSV.
Je lance l'exportation sur une page X contenant un formulaire en cliquant sur le bouton de soumission.
La page est alors rechargée et avant l'affichage html je crée mon fichier csv par une fonction qui :
  • crée le fichier
  • y écrit les infos au format csv séparés par un ;
  • referme le fichier
  • propose le popup de téléchargement du navigateur (ouvrir, enregistrer, annuler)
Ensuite le corps de la page X s'affiche.

Le problème est que dans le fichier csv téléchargé, on retrouve tout le code HTML de la page X à la fin du fichier.
J'aimerais savoir comment éviter que ce code HTML ne soit écrit dans le fichier?

voici le code de la fonction:
public function exporterCSV($nomFichier='fichier_export_csv.csv') {

	$fichier = fopen($nomFichier, 'w');
	$entete = array('adresse mail','code postal','pays');
	fputcsv($fichier,$entete,';');
	foreach($this->liste as $utilisateur){
		$tab = array($utilisateur->getMail(),$utilisateur->getCp(),$utilisateur->getPays);
	    fputcsv($fichier,$tab,';');
	}
	fclose($fichier);
	// on propose le fichier en téléchargement
	header('Content-type: application/csv');
	header('Content-Disposition: attachment; filename="'.$nomFichier.'"');
	readfile($nomFichier);
}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

18 juin 2010, 13:02

Bonjour,

Mets ton code PHP qui génère ton fichier CSV dans une page PHP à part qui ne contient que cela (donc sans code HTML) et dans ta page HTML fais juste un lien vers cette nouvelle page.
Quand tout le reste a échoué, lisez le mode d'emploi...

d0m
Mammouth du PHP | 1141 Messages

22 juin 2010, 13:22

merci pour ta réponse.

Ta proposition m'a éclairé.
J'ai donc créé un deuxième formulaire dans ma page dédié à l'export qui se contente de reprendre en caché (input type hidden) les infos de tri du premier formulaire. En cliquant sur le bouton de soumission de ce formulaire, j'envoie sur une autre page qui s'occupe de l'export réel de la liste d'utilisateur.
Voici le code pour ceux que l'idée pourrait intéresser :
<form name="<?php echo $formulaireExport->getNom();?>" method="<?php echo $formulaireExport->getMethode();?>" action="<?php echo $formulaireExport->getAction();?>" id="formulaireExport" target="_blank" >
    <input id="exporter" type="submit" name="<?php echo $formulaireExport->getNomBoutonSoumission();?>" value="Exporter" />
    <input type="hidden" name="<?php echo $formulaire->getNomListeTypesInscrits();?>" 	value="<?php echo $formulaire->getTypeInscrits();?>" />
    <input type="hidden" name="<?php echo $formulaire->getNomSaisieCp();?>" 			value="<?php echo $formulaire->getCpTri();?>" />
    <input type="hidden" name="<?php echo $formulaire->getNomListePays();?>" 			value="<?php echo $formulaire->getIdPaysSelectionne();?>" />
</form>