Script qui génère un fichier CSV

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Script qui génère un fichier CSV

par uspy62 » 04 nov. 2008, 12:19

Bon je reviens sur cette discussion puisque j'ai un peu avancé sur le problème, désormais tout est bien dans la bonne colonne mise à part que la description des produits déborde parfois, je ne sais pas pourquoi, voici mon scrit :
//on recupere les infos des produits dans la bdd
$req="SELECT * FROM produits";
$result=mysql_query($req);

if(mysql_num_rows($result)>0) {
$contenu='ID;Référence;Nom;Délais_de_livraison;Description_Produit;Description_Générale'."\r\n";
while (($article=mysql_fetch_array($result))!=false){
 $contenu=$contenu.$article['id'].';"'.$article['sku'].'";"'.$article['name'].'";"'.$article['dispo'].'";"'.html_entity_decode(strip_tags($article['description_produit'])).'";"'.html_entity_decode(strip_tags($article['description_generale'])).'"'."\r\n";
}

$file="produits.csv";
$fp=fopen($file,"w" ); // ouverture du fichier 
fputs($fp,$contenu); // enregistrement des données ds le fichier 
fclose($fp);
header("Content-Type: application/force-download" );
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=".$file);
readfile($file);
unlink($file);
}
En fait j'ai mis des guillemets autour des champs pour qu'il ne débordent pas dans les autres cases, mais malgré tout le champ description générale, déborde.

par uspy62 » 28 oct. 2008, 15:57

Merci pour ta réponse, alors j'ai trouvé le début d'une solution puisque ça me met un peu nimporte quoi dans le fichier csv, mais c'est un bon début :).

voila ma page qui génère le fichier csv :

Code : Tout sélectionner

<?php //on inclut la connexion include("connexion.php"); //on recupere les infos dans la bdd $req="SELECT * FROM produits"; $result=mysql_query($req); if(mysql_num_rows($result)>0) { //Si au moins une ligne est retournée $contenu='Référence;Nom;Prix HT;Prix TTC;TVA;Remise;Prix HT réduit;Prix TTC réduit;Description produit;Description;Poids;Disponibilité;Stock'."\r\n"; while (($article=mysql_fetch_array($result))!=false){ $contenu=$contenu.$article['ref]'.';'.strip_tags(stripslashes($article['name]')).';'.$article['price_ht'].';'.$article['price_ttc'].';'.$article['tva'].';'.$article['reduc'].';'.$article['price_ht_reduc'].';'.$article['price_ttc_reduc'].';'.strip_tags(stripslashes($article['product_sku'])).';'.strip_tags(stripslashes($article['general_sku'])).';'.$article['weigth'].';'.strip_tags(stripslashes($article['dispo'])).';'.$article['stock']."\r\n"; } $file="article.csv"; $fp=fopen($file,"w" ); // ouverture du fichier fputs($fp,$contenu); // enregistrement des données ds le fichier fclose($fp); header("Content-Type: application/force-download" ); header("Content-Length: ".filesize($file)); header("Content-Disposition: attachment; filename=".$file); readfile($file); unlink($file); } ?>
En fait le problème c'est que toutes les données ont l'air d être là mais pas au bon endroit.
Il me crée bien les colonnes avec les noms données, mais ensuite il met un peu nimporte quoi dans les colonnes, ceci vient peut être du fait que le séparateur n'est pas un ; mais autre chose...

Quequ'un a une idée ?

En fait je viens de tester et c'est à cause des descriptions des produits, en fait les description contiennent du html, quand je les enlève, ça passe super bien ...
Donc il faut que je réussise à virer le code html des description, j'ai fait un strip_tags() pourtant mais ça ne passe pas quand même...

par stopher » 28 oct. 2008, 14:46

Bonjour ,

Je n'ai pas la réponse car je ne l'ai jamais fait , mais peut être des pistes qui peuvent t'aider ..

1 : pour creer un csv , tu peux utiliser la fonction fputcsv

2 : Celle ci réclame un fichier , toi tu ne veux pas creer de fichier stocké à long terme , dans ce cas , il y a la possibilité de creer un fichier temporaire avec cette fonction tmpfile .

3 : Ensuite , pour proposer le fichier en telechargement à l'utilisateur tu peux jouer sur les headers avec cette fonction par exemple : header , comme expliquer dans un exemple sur cette page avec un fichier pdf :

Code : Tout sélectionner

// Vous voulez afficher un pdf header('Content-type: application/pdf'); // Il sera nommé downloaded.pdf header('Content-Disposition: attachment; filename="downloaded.pdf"'); // Le source du PDF original.pdf readfile('original.pdf');
Voilà pour les pistes , maintenant il existe peut être une facon de faire plus simple ... mais je ne la connais pas ..

Bonne chance , et si tu trouves , n'hésites pas à poster la solution ici :D

Script qui génère un fichier CSV

par uspy62 » 28 oct. 2008, 12:06

Bonjour à tous, j'ai besoin de récupérer un fichier CSV qui contiendra les informations de mon client pour pouvoir ensuite l'insérer dans un logiciel sur mon pc.

Comment réussir à partir de php à générer un csv ?
En fait je voudrais un lien "CSV client" et quand je cliquerais dessus je voudrais une proposition de téléchargement du fichier CSV, c 'est possible ?

Je veux aussi que le fichier ne se crée que lorsque je clique sur "CSV Client" et pas avant.

Mon fichier CSV ne sera pas présent physiquement sur le DD mais je ne sais pas si c'est possible.

PS : Un peu comme la génération d'image en php.

Merci d'avance