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 :

[CSV] Enregistrer automatiquement un fichier CSV à un endroit voulu


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Par défaut [CSV] Enregistrer automatiquement un fichier CSV à un endroit voulu
    Salut ^^
    J'ai trouvé un script permettant d'exporter une table en fichier CSV, mais le problème réside dans le fait qu'en cliquant sur un bouton, il me demande si je veux enregistrer le fichier, alors que je voudrais qu'il me le mette sur le disque à un endroit bien définit.
    Voici le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?
    // Liste les données de la table
    // -------------------------------------------
    session_start();
    mysql_connect("localhost", "root");
    mysql_select_db("intranet");
    $resQuery = mysql_query("SELECT service.service, fonction.fonction, personnel.nom, repertoire.num_int, repertoire.num_ext, repertoire.num_port, repertoire.num_fax FROM repertoire, personnel, fonction, service WHERE repertoire.id_pers = personnel.id_pers AND personnel.id_fonction = fonction.id_fonction AND personnel.id_service = service.id_service");
     
    header("Content-Type: application/csv-tab-delimited-table");
    header("Content-disposition: filename=repertoire.csv");
     
    if (mysql_num_rows($resQuery) != 0) {
      // titre des colonnes
      $fields = mysql_num_fields($resQuery);
      $i = 0;
      while ($i < $fields) {
        echo mysql_field_name($resQuery, $i).";";
        $i++;
      }
      echo "\n";
     
      // données de la table
      while ($arrSelect = mysql_fetch_array($resQuery, MYSQL_ASSOC)) {
       foreach($arrSelect as $elem) {
        echo "$elem;";
       }
       echo "\n";
      }
    }
    Merci ^^

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Par défaut
    Quand tu parles d'enregistrer sur le disque, tu parles bien du disque client et non d'un espace sur ton serveur web ?

    Car si c'est le cas, je ne crois pas qu'il soit possible de forcer le téléchargement chez le client en spécifiant soit meme un chemin (quid si ce chemin n'existe pas chez le client ??).

    Si maintenant tu parles d'enregistrer sur le serveur, c'est pas bien compliqué, tu peux utiliser fopen pour ouvrir un fichier et fputs pour le remplier avec les données de ton csv.

  3. #3
    Membre confirmé Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Par défaut
    Merci pour ta réponse
    Alors en effet je voulais parler du serveur.

    Et désolé de mon ignorance, mais je suis tombé sur cette page : http://fr2.php.net/manual/fr/function.fwrite.php pour ton fopen/fputs, mais je ne sais pas comment l'utiliser dans mon script

    En fait mon script prend les données de la table et les exporte en CSV (ça, ça marche bien), et je voudrais juste le mettre dans un dossier bien définit.
    Car je compte l'utiliser avec un autre script qui va le chercher à un endroit bien définit.
    Mais je n'arrive pas à voir comment je pourrais placer le fwrite correctement.
    Pourrais-tu m'aider ?
    Merci ^^

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Il faut supprimer l'envoi au client (les appels aux fonctions header), ouvrir le fichier en écriture (fonction fopen avec pour deuxième paramètre 'w', par exemple) et enfin remplacer les echo par fputs ou fwrite (à moins d'utiliser une bufferisation) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?
    // Liste les données de la table
    // -------------------------------------------
    session_start();
    mysql_connect("localhost", "root");
    mysql_select_db("intranet");
    $resQuery = mysql_query("SELECT service.service, fonction.fonction, personnel.nom, repertoire.num_int, repertoire.num_ext, repertoire.num_port, repertoire.num_fax FROM repertoire, personnel, fonction, service WHERE repertoire.id_pers = personnel.id_pers AND personnel.id_fonction = fonction.id_fonction AND personnel.id_service = service.id_service");
     
    $fp = fopen('repertoire.csv', 'w') or die("Impossible d'ouvrir 'repertoire.csv' en écriture");
     
    if (mysql_num_rows($resQuery) != 0) {
      // titre des colonnes
      $fields = mysql_num_fields($resQuery);
      $i = 0;
      while ($i < $fields) {
        fwrite($fp, mysql_field_name($resQuery, $i).";");
        $i++;
      }
      fwrite($fp, "\n");
     
      // données de la table
      while ($arrSelect = mysql_fetch_array($resQuery, MYSQL_ASSOC)) {
       foreach($arrSelect as $elem) {
        fwrite($fp, "$elem;");
       }
       fwrite($fp, "\n");
      }
    }
    fclose($fp);
    Mais je vous recommande de potasser la documentation au sujet des fichiers

    A noter qu'une fonction est déjà prévue pour la création de fichier CSV : fputcsv, mais requiert une version >= 5.1.0

  5. #5
    Membre confirmé Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Par défaut
    Nickel merci !

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

Discussions similaires

  1. [XL-2007] Problème import fichier .csv en automatique
    Par schulmeister dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/03/2010, 15h45
  2. Récupérer automatiquement un fichier .csv sur serveur FTP
    Par oagi_jaheim dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 13/09/2009, 19h19
  3. [XL-2003] Importer automatiquement un fichier CSV dans une feuille
    Par Mikayel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/06/2009, 11h35
  4. [CSV] Protection génération de fichier CSV
    Par Fooshi dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2005, 14h55
  5. Réponses: 12
    Dernier message: 07/12/2005, 19h42

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