Rechercher : dans
Par :

Pb header et creation csv en PHP

Dernière réponse le 1 avr 2009 à 17:14:23 pinkemma, le 25 mai 2007 à 15:43:37 
 Signaler ce message aux modérateurs

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

-- Pink Emma

Configuration: Windows Vista
Firefox 2.0.0.3

Meilleures réponses pour « pb header et creation csv en PHP » dans :
[PHP] Headers already sent by..... VoirLorsque vous utilisez une fonction PHP qui manipule les en-têtes HTTP comme par exemple: header() setcookie() session_start() Il est important d'utiliser ces fonctions avant d'avoir généré le moindre flux vers le client. A partir du moment où...
[Outils] Freewares pour la création de sites Voir1. Éditeurs WYSIWYG 2. Éditeurs de code 3. Client FTP 4. Graphisme et retouche d'images 5. Graphisme de style FLASH 6. Édition audio 7. Serveur web Freewares pour la création de sites Vu le nombre de demandes pour créer un site, voici...
PHP - Génération d'images VoirPrérequis PHP permet de créer des images au format GIF à l'aide d'une librairie de fonctions prévue à cet effet. La librairie permettant de créer et manipuler des fichiers graphiques se nomme GD, ainsi, pour pouvoir utiliser ces fonctions il faut...
PHP - Les cookies et les en-têtes HTTP VoirLes en-têtes HTTP Lors de chaque échange par le protocole HTTP entre votre navigateur et le serveur, des données dîtes d'en-têtes contenant des informations sur les données à envoyer (dans le cas d'une requête) ou envoyées (dans le cas d'une...
PHP - Mail et fonctions réseau VoirPHP étant un langage consacré au Web, il possède bien évidemment des fonctions lui permettant de communiquer avec le "monde extérieur" à l'aide de fonctions standards. Le service le plus utilisé sur Internet étant la messagerie électronique, il est...

1

s.spark, le 26 mai 2007 à 17:43:32

Salut,

Pourquoi y'a-il écrit ca en haut de ton script ??

javascript:;
javascript:; 

Ceux qui veulent savoir comment utiliser eMule Paradise contactez moi par email.

Répondre à s.spark

2

pinkemma, le 29 mai 2007 à 09:03:17

Heu je sais pas pourquoi cal'a mis car dans mon code je ne le vois pas Pink Emma

Répondre à pinkemma

3

argos, le 27 jui 2007 à 13:19:53

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

Répondre à argos

4

Burnog, le 13 oct 2008 à 09:27:01
  • +2

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" :

<?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.

Répondre à Burnog

5

 reedbedroom, le 1 avr 2009 à 17:14:23

Hello Burnog,

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.

Répondre à reedbedroom