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 :

générer un fichier CSV à chaque nouvelle date


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 19
    Par défaut générer un fichier CSV à chaque nouvelle date
    Bonjour,

    Après des recherches sur le sujet, je n'ai trouvé aucune solution et m'adresse donc à vous.
    Voici mon problème : j'ai des données d'écritures comptables (9.000 lignes) de janvier à mars, enregistrées dans ma BDD (la table comprend plusieurs champs, dont un "date"), que je dois extraire au format CVS, avec comme particularité qu'il faut créer un fichier CSV à chaque nouvelle de date. Par exemple, le 10/01/2020 j'ai 10 écritures, le 11/01/2020 15 écritures, le 12 40 écritures -> il me faut à l'arriver 3 fichiers. Et ce dernier point, je ne sais pas du tout comment l'aborder...

    Pour l'instant, voici le code :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php 
    require('includes/application_top.php');
    require_once('includes/configure.php');
     
      if ( mysql_connect ( DB_SERVER , DB_SERVER_USERNAME , DB_SERVER_PASSWORD )) { 
    	$sql   = "SELECT * " ; 
    	$sql .= "FROM " . TABLE_FEC . ""; 
    	$result = mysql_db_query ( DB_DATABASE , $sql );
    	$filedate = mysql_fetch_array($result);
    	$filemonth = list($year, $month, $day) = split('[/.-]', $filedate['date']);
    	date_default_timezone_set('Europe/Paris');
    	$datetime = new DateTime('');
     
      $filename="journal.txt";
     
    header('Content-Type: text/x-csv');
    header('Content-Disposition: attachment; filename="' . $filename . '"');
    header('Expires: 0');
    header("Pragma: no-cache");
     
    	$result = mysql_db_query ( DB_DATABASE , $sql );
    	echo "Date\tNumero de reference\tCode de journal\tCompte\tDescription\tDebit\tCredit\tNom\tTVA\tSite\tClasse\r\n";
    	while ($row = mysql_fetch_array($result)) {
     
    		$date = tep_date_short($row['date']);
    		$reference = $row['numero_reference']; 
    	    $journal = $row['code_journal'];
    		$compte = $row['compte'];
    	    $description = $row['description'];
    		$debit = $row['debit'];
    		$credit = $row['credit'];
    		$nom = $row['nom'];
    		$tva = $row['tva'];
    		$site = $row['site'];
    		$classe = $row['classe']; 
     
    		echo $date . "\t" . $reference . "\t" . $journal . "\t" . $compte . "\t" . $description . "\t" . $debit . "\t" . $credit . "\t" . $nom . "\t" . $tva . "\t" . $site . "\t" . $classe . "\r\n";
        }
      } 
    mysql_close (); 
    ?>
    Auriez-vous un exemple à me transmettre pour répondre à ma question ?

    Merci à toutes et tous !

    69gOO

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 020
    Par défaut
    La première chose que je te conseille de faire est de ne plus utiliser l'extension mysql_* qui est obsolète depuis plus de dix ans et qui a été enlevé des versions 7 de PHP. Ça évitera de te retrouver coincer avec une version de PHP qui n'est plus supporté et de devoir faire des recherches archéologiques en cas de problème. Donc tu as deux options en remplacement, soit l'extension mysqli, soit PDO. Il y a tout une littérature sur le sujet, je te laisse faire des recherches.

    À noter que dans ton code tu exécutes la même requête 2 fois, ce n'est pas utile.

    Ensuite, pour générer un fichier csv, ton code me semble correct (en admettant qu'aucun de tes champs ne contienne de tabulation, sinon il est indispensable de produire tes enregistrements avec fputcsv en utilisant un descripteur de fichier obtenu avec l'url php://output qui est la sortie standard). La seule chose qui te reste à faire est donc de limiter les résultats de ta requête SQL à une date précise en utilisant une clause WHERE sur la date voulue.

    Commence déjà par modifier ton code pour qu'il te renvoie le csv d'un jour fixe (n'importe lequel, dans un premier temps on s'en fiche), ensuite on verra comment faire varier ce jour à partir de l'url.

Discussions similaires

  1. [Silverlight] Générer un fichier CSV
    Par NTIC13 dans le forum Silverlight
    Réponses: 21
    Dernier message: 17/03/2011, 17h08
  2. Générer un fichier .csv en java
    Par makia42 dans le forum Documents
    Réponses: 2
    Dernier message: 23/04/2010, 11h52
  3. Flash est-il capable de générer un fichier CSV
    Par jagt10 dans le forum Flash
    Réponses: 1
    Dernier message: 19/02/2010, 13h49
  4. [CSV] générer un fichier csv
    Par johnny57 dans le forum Langage
    Réponses: 1
    Dernier message: 16/08/2007, 16h45
  5. [CSV] Générer un fichier CSV
    Par Taz_8626 dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2006, 08h25

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