IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fabrication et export d'un fichier CSV [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 103
    Points
    103
    Par défaut Fabrication et export d'un fichier CSV
    Bonjour à tous,

    Je souhaite exporter des données d'une base par le biai d'un fichier CSV (comme dans phpMyAdmin).

    Je commence avec un formulaire qui fourni la période concerné. Une fois le formulaire validé, je souhaite qu'un fichier soit généré et qu'il soit téléchargé (comme quand on fait "enregistrer sous...").

    Voici comment je procède, d'abord je récupère les données dans ma base et je les met dans une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // Ma requete
    $sql_listing_client = mysql_query("ma requete") or die(mysql_error());
     
    // Je recupere les entetes
    $array_label_listing_client = array_keys(mysql_fetch_assoc($sql_listing_client));
    $entete = '"' .  implode('","', $array_label_listing_client) . '"<br />';
     
    // Je recupere les donnee, je formate en csv	
    while ($array_listing_client = mysql_fetch_row($sql_listing_client)) {
    	$contenu = $contenu . '"' .  implode('","', $array_listing_client) . '"<br />';
    }
     
    $retour = $entete . $contenu;
    Et ensuite j'écrit le contenu de ma variable $retour dans un fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // j'ouvre $fichier
    if (!$handle = fopen($fichier, 'a')) {
    	exit;
     }
    // J' écrit le $contenu dans le $fichier
    if (fwrite($handle, $contenu) === FALSE) {
    	exit;
     }
    fclose($handle);
    A ce stade hormis les balises <br /> que je voudrais bien transformer en "retour à la ligne" (je n'arrive pas à caser les "\n" où il faut!), tout va bien je récupère un joli fichier d'une seule ligne :)

    Je suis partit à la recherche d'une fonction qui pourrait "transmettre" ce fichier et j'ai trouvé http_send_file() que je n'arrive pas à faire fonctionner....

    Donc tous conseils sur le sujet serait bienvenu!

    D'avance merci ;)

  2. #2
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Salut !

    Tu devrais regarder du côté de fputcsv() et de header().

    A++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 103
    Points
    103
    Par défaut
    Rhooo! Merci

    fputcsv() c'est sans doute super mais visiblement ça marche avec un fichier plutôt qu'une variable, du coup header() ça convient parfaitement à ce que je cherchais.

    J'ai laissé tomber le CSV et j'exporte en HTML, comme ça ça règle mon problème de retour chariot qui commençait à me chauffer et ça passe très bien aussi dans un tableur.

    Ça donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    base_connect('bdd');
    $sql_listing_client = mysql_query("SELECT etc.") or die(mysql_error());
     
    $array_label_listing_client = array_keys(mysql_fetch_assoc($sql_listing_client));
    $entete =  '<tr><th>' . implode('</th><th>', $array_label_listing_client) . '</th></tr>';
     
    while ($array_listing_client = mysql_fetch_row($sql_listing_client)) {
    	$contenu = $contenu . '<tr><td>' .  implode('</td><td>', $array_listing_client) . '</td></tr>';
    }
    $retour =  '<table>' . $entete . $contenu . '</table>';
     
    header('Content-type: text/html');
    header('Content-Disposition: attachment; filename="export.xls"');
    echo	$retour,"\n";

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exporter vers un fichier CSV les résultats d'un SELECT
    Par Nycoala dans le forum Développement
    Réponses: 9
    Dernier message: 21/01/2009, 16h14
  2. exporter vers un fichier csv
    Par Beltegeuse dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 07/05/2008, 12h59
  3. Réponses: 6
    Dernier message: 18/07/2006, 20h32
  4. Export dans un fichier CSV
    Par sophie86 dans le forum Documents
    Réponses: 4
    Dernier message: 09/12/2005, 09h55
  5. [Oracle] export vers un fichier csv
    Par illegalsene dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/10/2005, 23h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo