[PHP] Générer un fichier csv dans un dossier

mourad.hamama Messages postés 4 Statut Membre -  
jisisv Messages postés 3678 Statut Modérateur -
Bonjour,

Dans mon application web j'ai créer un fichier PHP qui me génère un fichier csv à partir d'une table de ma base de donnée, à l'exécution tout marche très bien, le fichier se génère et le navigateur me donne la possibilité de télécharger ... sauf que moi j'aimerai bien l'enregistrer dans un répertoire précis sans le télécharger :s que faire et merci d'avance pour vos réponse

Voici le code de mon fichier :


<?php  
require_once('includs/config.php');  
$host = '127.0.0.1'; // <--  db address  
$user = 'root'; // <-- db user name  
$pass = ''; // <-- password  
$db = 'easychange_db';  
$link = mysql_connect($host, $user, $pass) or die("pas de connexion." . mysql_error());  
mysql_select_db($db) or die("Can not connect.");  
     
 $mois=$_POST["date"];  
 if($mois==1){  
  $mois2="JANVIER";}  
 elseif($mois==2){  
  $mois2="FEVRIER";}  
 elseif($mois==3){  
  $mois2="MARS";}  
 elseif($mois==4){  
  $mois2="AVRIL";}  
 elseif($mois==5){  
  $mois2="MAI";}  
 elseif($mois==6){  
  $mois2="JUIN";}  
 elseif($mois==7){  
  $mois2="JUILLET";}  
 elseif($mois==8){  
  $mois2="AOUT";}  
 elseif($mois==9){  
  $mois2="SEPTEMBRE";}  
 elseif($mois==10){  
  $mois2="OCTOBRE";}  
 elseif($mois==11){  
  $mois2="NOVEMBRE";}  
 elseif($mois==12){  
  $mois2="DECEMBRE";}  

//////////////////// Entete:  
$csv_output .= "BUREAU DE CHANGE:";  
$csv_output .= ";";   
$csv_output .= "SICIETE D4INTERMEDIATION EN MATIERE DE TRANSFERT DE FOND:";   
$csv_output .= "\n";   
$csv_output .= "N DE L'AUTORISATION DE L'OFFICE DES CHANGES::";   
$csv_output .= ";";  
$csv_output .= "Adr";  
$csv_output .= "\n";   
$csv_output .= "ADRESSE:";   
$csv_output .= ";";  
$csv_output .= "N";  
$csv_output .= "\n";  
$csv_output .= "MOIS:";  
$csv_output .= ";";  
$csv_output .= $mois2;  
$csv_output .= ";";  
$csv_output .= "ANNEE:";  
$csv_output .= ";";  
$csv_output .= date(Y);  
$csv_output .= "\n";  
$csv_output .= "\n";  

/////////// Titres:  
$csv_output .= "ETABLISSEMENT DE CREDIT  
ET BANQUE AL-MAGHRIB";  
$csv_output .= ";";  
$csv_output .= "DEVISE";  
$csv_output .= ";";   
$csv_output .= "MONTANT EN DEVISES";  
$csv_output .= ";";   
$csv_output .= "CONTREVALEUR EN DIRHAMS";  
$csv_output .= ";";  
$csv_output .= "\n";  


$req=mysql_query("select banque, denomination, SUM(montant) as mont, SUM(cv_dh) as eurodh from cession where MONTH(date)=".$mois." GROUP BY denomination");  

   while($row = mysql_fetch_array($req)){  
    $banque=$row['0'];  
   $denomination=$row['1'];  
   $montant=(DOUBLE)$row['2'];  
   $cv=(DOUBLE)$row['3'];  

$csv_output .= $banque;  
$csv_output .= ";";  
$csv_output .= $denomination;  
$csv_output .= ";";   
$csv_output .= $montant;  
$csv_output .= ";";   
$csv_output .= $cv;  
$csv_output .= ";";  
$csv_output .= "\n";  
}  

//<------ csv  
$filename ="Cession-".$mois.date("-Y-");  
$filename .= NUMAUT;  
   
header("Content-type: application/vnd.ms-excel");  
header("Content-disposition: csv" . date("Y-m-d") . ".csv");  
header( "Content-disposition: filename=".$filename.".csv");  
print $csv_output;  
exit;  
?>  



2 réponses

  1. Giorgiolino Messages postés 250 Date d'inscription   Statut Contributeur Dernière intervention   52
     
    Salut,

    a priori il s'agit simplement d'écrire les données dans un fichier. Cela n'a rien d'insurmontable.

    Un petit tour par la documentation t'apprendra ce que tu as besoin de savoir pour y arriver :
    https://www.php.net/manual/fr/function.file-put-contents.php
    2
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    Tu réinventes la roue en utilisant un code long, difficile à maintenir et à améliorer.

    Au lieu d'utiliser une tétrachiée de tests, utilise une table de hashage:
    johand@osiris: ~/src/CCM/php $ cat hash-test.php    
    <?php   
    $mois=1;   
    $months = array ("JANVIER", "FEVRIER");   
    $mois2= $months[$mois -1];   
    print $mois2;   
    ?>   
    johand@osiris: ~/src/CCM/php $ php hash-test.php    
    JANVIER
    Réorganise ton code de manière à utiliser fputscsv par exemple https://www.php.net/manual/fr/function.fputcsv.php
    Si ton code est bien écrit, il n'y a pas de nécessité de placer les intitulés de champ dans le CSV (mets les sur la première ligne)
    Pourquoi cette tétrachiée de concaténations? Utilise sprintf.
    En bref ton code (hors appel à la BDD peut se résumer en 10 lignes ;Ð
    Gates gave ^H sold you the windows.
    GNU gave us the whole house.(Alexandrin)
    1