Pb header et creation csv en PHP
pinkemma
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
vince -
vince -
Bonjour,je souhaite créer un fichier csv en php.
Pour cela j'utilise ce code:
<?PHPjavascript:;
javascript:;
$array = array(
'france' => array('francais','60','paris'),
'belgique' => array('francais','5','bruxelles'),
'italie' => array('italien','55','rome'));
$csv = "Pays;Langue;Population;Capitale\n";
// construction de chaque ligne
foreach($array as $pays => $donnees)
{ // on concatene a $csv
$csv .= "$pays;".$donnees[0].';'.$donnees[1].';'.$donnees[2]."\n"; // le \n final entre " "
}
// toutes les donnees sont en chaine, on va envoyer :
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=\"monsuperfichier.csv\"");
print($csv);
exit;
?>
PB: le navigateur affiche ceci:
Warning: Cannot modify header information - headers already sent by (output started at /home/wmbleu/bleu-digital.fr/www/test/exporter.php:7) in /home/wmbleu/bleu-digital.fr/www/test/exporter.php on line 21
Warning: Cannot modify header information - headers already sent by (output started at /home/wmbleu/bleu-digital.fr/www/test/exporter.php:7) in /home/wmbleu/bleu-digital.fr/www/test/exporter.php on line 22
Pays;Langue;Population;Capitale france;francais;60;paris belgique;francais;5;bruxelles italie;italien;55;rome
savez vous d'où vient le probleme?
merci d'avance
--
Pour cela j'utilise ce code:
<?PHPjavascript:;
javascript:;
$array = array(
'france' => array('francais','60','paris'),
'belgique' => array('francais','5','bruxelles'),
'italie' => array('italien','55','rome'));
$csv = "Pays;Langue;Population;Capitale\n";
// construction de chaque ligne
foreach($array as $pays => $donnees)
{ // on concatene a $csv
$csv .= "$pays;".$donnees[0].';'.$donnees[1].';'.$donnees[2]."\n"; // le \n final entre " "
}
// toutes les donnees sont en chaine, on va envoyer :
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=\"monsuperfichier.csv\"");
print($csv);
exit;
?>
PB: le navigateur affiche ceci:
Warning: Cannot modify header information - headers already sent by (output started at /home/wmbleu/bleu-digital.fr/www/test/exporter.php:7) in /home/wmbleu/bleu-digital.fr/www/test/exporter.php on line 21
Warning: Cannot modify header information - headers already sent by (output started at /home/wmbleu/bleu-digital.fr/www/test/exporter.php:7) in /home/wmbleu/bleu-digital.fr/www/test/exporter.php on line 22
Pays;Langue;Population;Capitale france;francais;60;paris belgique;francais;5;bruxelles italie;italien;55;rome
savez vous d'où vient le probleme?
merci d'avance
--
A voir également:
- Csv header php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- 400 bad request request header or cookie too large - Forum Windows
- Alert php ✓ - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
3 réponses
Merci pour ce petit bout de script messieurs, c'est exactement ce dont j'avais besoin.
Pour récapituler, je l'ai écris comme ça, c'est LA façon "clean" :
Maintenant je vais le mettre à ma sauce pour rendre le nom du fichier dynamique, et entrer des données calculées entre php et mysql plutot qu'un ARRAY.
Pour récapituler, je l'ai écris comme ça, c'est LA façon "clean" :
<?php header("Content-type: application/vnd.ms-excel"); header("Content-disposition: attachment; filename=\"monsuperfichier.csv\""); $array = array( 'france' => array('francais','60','paris'), 'belgique' => array('francais','5','bruxelles'), 'italie' => array('italien','55','rome')); $csv = "Pays;Langue;Population;Capitale\n"; // construction de chaque ligne foreach($array as $pays => $donnees) { // on concatene a $csv $csv .= "$pays;".$donnees[0].';'.$donnees[1].';'.$donnees[2]."\n"; // le \n final entre " " } print($csv); exit; ?>
Maintenant je vais le mettre à ma sauce pour rendre le nom du fichier dynamique, et entrer des données calculées entre php et mysql plutot qu'un ARRAY.
Si tu as cette erreur, c'est que tu as déjà écrit sur la sortie standard avant d'appeler header.
apparemment sur ton script il y aurait quelque chose à la ligne 7 (que tu ne nous à pas montré, le copier/coller est incomplet).
il suffit d'une balise <HTML>.
Pour bien faire,
il est conseillé de commencer ton fichier par
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=\"monsuperfichier.csv\"");
sans RIEN avant le <?php
apparemment sur ton script il y aurait quelque chose à la ligne 7 (que tu ne nous à pas montré, le copier/coller est incomplet).
il suffit d'une balise <HTML>.
Pour bien faire,
il est conseillé de commencer ton fichier par
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=\"monsuperfichier.csv\"");
sans RIEN avant le <?php
Je me suis servi de ton script pour extraire des données dans un fichier CSV...lorsque que le code est statique tout fonctionne correctement, mais lorsque je veux me servir de ce script de façon dynamique, impossible !
L'erreur <b>Warning</b>: Invalid argument supplied for foreach() in apparait à chaque fois, alors qu'il n'y a aucune erreur.
Je m'explique, j'extrais les données d'un base de données grâce à une boucle While(), j'ouvre le premier tableau $array() avant cette boucle, et la referme à la fin de la boucle. Lorsque je fais un echo() des données de ma boucle et que je colle le contenu dans le tableau tout fonctionne correctement, mais si c'est en dynamique le foreach() ne semble pas reconnaitre le tableau.
Voici mon code source, si tu y comprends quelque chose :
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=\"monsuperfichier.csv\"");
/*$array = array(
france' => array('francais','60','paris'),
belgique' => array('francais','5','bruxelles'),
italie' => array('italien','55','rome')); */
require('../connexion.php');
$sql = 'SELECT * FROM `solaire` WHERE `rueducommerce` = "Y" ORDER BY `marque`';
$result = mysql_query($sql);
$texte1 = 'array(';
while($data = mysql_fetch_array($result))
{
$idproduit = $data['ref'];
$idmarque = $data['marqu'];
$reference = $data['ref'];
$nom = $data['gamme'];
$description = 'Lunettes de soleil '.$data['marque'];
$technique = 'Type verre : '.$data['verre'].' - Catégorie : '.$data['protection'];
$univers = 'LSMS';
$image = 'image';
$vignette = 'vignette';
$poids = '200';
$stock = '1';
$pvht = number_format($data['prix']/1.196,2);
$pvhtPrive = number_format($pvht*0.80,2);
$coupcoeur = '0';
$visible = '1';
$prive = '0';
$livrablePartenaire = '0';
$tva = 19.6;
$delais = '3';
$texte2 = "'$idproduit'=> array('$idmarque','$reference','$nom','$description','$technique','$univers','$image','$vignette','$poids','$stock','$pvht','$pvhtPrive','coupcoeur','$visible','$prive','$livrablePartenaire','$tva','$delais')";
if($texte3==""){
$texte3 = $texte2;
}else{
$texte3 = $texte3.','.$texte2;
}
};
$texte4 = ')';
$array = $texte1.$texte3.$texte4;
$csv = "idproduit;idmarque;reference;nom;description;technique;univers;image;vignette;poids;stock;pvht;pvht prive;coupcoeur;visible;prive;livrable partenaire;tva;delais\n";
// construction de chaque ligne
foreach($array as $test => $donnees)
{ // on concatene a $csv
$csv .= "$test;".$donnees[0].';'.$donnees[1].';'.$donnees[2].';'.$donnees[3].';'.$donnees[4].';'.$donnees[5].';'.$donnees[6].';'.$donnees[7].';'.$donnees[8].';'.$donnees[9].';'.$donnees[10].';'.$donnees[11].';'.$donnees[12].';'.$donnees[13].';'.$donnees[14].';'.$donnees[15].';'.$donnees[16].';'.$donnees[17]."\n"; // le \n final entre " "
echo $test;
echo $donnees[0];
}
print($csv);
exit;
Merci de jeter un oeil si tu as quelques minutes, je suppose que tu dois connaitre la solution car il me semblait que tu voulais toi aussi générer un CSV dynamiquement.
Merci.