2016-07-20 6 views
-1

テーブル内のデータベースからデータを取得してエクスポートします。空のCSVファイルをエクスポートするPHP

これは私のコードです:

<form action="/csv_file/getCSV.php" method="POST"> 
<input type="hidden" name="csv_text" id="csv_text"> 
<input type="submit" value="Export as CSV" onclick="getCSVData()" class="btn btn-success"> 

     <table id="table_with_sorting" style="zoom: 85%"> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Code</th> 
       <th>Supplier</th> 
      </tr> 
     </thead> 
     <?php 
      foreach ($data as $q => $v) : 
     ?> 
     <td><? echo $v['name']; ?></td> 
     <td><? echo $v['code']; ?></td> 
     <td><? echo $v['supplier']; ?></td> 

     <?php 
     endforeach; 
     ?> 
     </table> 

ページgetCSV.php:

<?php 

    header("Content-type: application/octet-stream"); 
    header("Content-Disposition: attachment; filename=\"my-data.csv\""); 
    $data=stripcslashes($_REQUEST['csv_text']); 
    echo $data; 
?> 

私がボタンにクリックし、 "CSVでエクスポートする" それがMYDATA空という名前のファイルを私に与えます。

お願いします。

ありがとう

+0

あなたは、getCSV.phpでDBから抽出フォームからあなたの答えのための –

+0

おかげでそれを解析してはいけません。 GetCSV.phpでデータを返さなければならなかったのですか? – user6611859

答えて

0

これらはすべて単一のファイル(フォームを含む同じファイル)で実行できます。プロセスは非常に簡単です... foreachループ内で、エクスポートするCSVファイルのコンテンツを作成し、Variableに保存します。次に、隠し入力フィールド(csv_text)の値を変数に設定します。しかし、依然として、あなたのスクリプトの一番上に、フォームが提出されたかどうかをチェックします。 「はい」の場合は、単にCSVファイルを処理してください(保存してダウンロード用に提供してください)。

新しい入力フィールドは、ユーザがファイルの優先名を​​選択できるようにするために追加されたことを注意....以下のコードは、手順を示しています。このことができます

<?php // WARNING! NOTICE THERE IS NO SPACE BEFORE <?php 

     // CREATE A VARIABLE TO HOLD THE VALUE TO BE PASSED TO THE HIDDEN FIELD: 
     // THIS VARIABLE HOLDS THE CONTENTS OF THE CSV DATA WE WANT TO EXPORT... 
     $csvData = ""; 

     // WE DON'T HAVE ACCESS TO YOUR DATABASE SO WE SIMULATE AN ARRAY 
     // OF ROWS CONTAINING SOME DATA (JUST FOR TESTING PURPOSES) 
     // HOWEVER, WITH THE DATA FROM YOUR DB, THE CODE WOULD STILL FUNCTION. 
     $data  = array(
         array("name"=>"Landry", "code"=>"123", "supplier"=>"ABC"), 
         array("name"=>"James", "code"=>"456", "supplier"=>"DEF"), 
         array("name"=>"Paul", "code"=>"789", "supplier"=>"GHI"), 
         array("name"=>"Nathan", "code"=>"012", "supplier"=>"JKL"), 
        ); 


     /** 
     * 
     * FUNCTION THAT PROMPTS USER TO DOWNLOAD THE EXPORTED CSV FILE 
     * @param $downloadFileName // FULL-NAME OF THE FILE TO DOWNLOAD  
     * @param null $newFileName // NEW-NAME FOR THE FILE... DO NOT USE EXTENSIONS LIKE .csv 
     * @return bool 
     * 
     */ 
     function processDownload($downloadFileName, $newFileName=null) { 
      $ext   = pathinfo($downloadFileName, PATHINFO_EXTENSION); 
      if(!$newFileName){ 
       $newFileName = basename($downloadFileName); 
      }else{ 
       $newFileName .= "." . $ext; 
      } 
      if(file_exists($downloadFileName)){ 
       $size  = @filesize($downloadFileName); 
       header('Content-Description: File Transfer'); 
       header('Content-Type: application/octet-stream'); 
       header('Content-Disposition: attachment; filename=' . $newFileName); 
       header('Content-Transfer-Encoding: binary'); 
       header('Connection: Keep-Alive'); 
       header('Expires: 0'); 
       header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
       header('Pragma: public'); 
       header('Content-Length: ' . $size); 
       readfile($downloadFileName); 
       return TRUE; 
      } 
      return FALSE; 
     } 

     // CHECK IF THE SUBMIT BUTTON WAS CLICKED 
     if(isset($_POST['submit'])){ 
      $csvTextData = $_POST['csv_text'];  // GET CSV DATA (INCLUDING HEADER) 
      $csvFileName = $_POST['csv_file_name']; // GET THE USER-DEFINED FILE-NAME 
      $fileName  = "my-data.csv";   // CREATE A DEFAULT FILE NAME 

      if($csvTextData && !empty($csvTextData)){ 
       if($csvFileName){ 
        $fileName = stristr($csvFileName,".csv")? $fileName : $fileName . ".csv"; 
       } 
       // SAVE THE CSV FILE TO YOUR SYSTEM... 
       file_put_contents($fileName, $csvTextData); 

       // LAUNCH THE DOWNLOAD 
       processDownload($fileName, $csvFileName); 
      } 
     } 

    ?> 

    <form action="" method="POST"> 
     <!-- GIVE THE USER A CHANCE TO CHOOSE HIS FILE-NAME --> 
     <input type="text" value="" name="csv_file_name" class="" placeholder="Enter desired File-Name"><br /> 
     <input type="submit" value="Export as CSV" name="submit" class="btn btn-success"> 

     <table id="table_with_sorting" style="zoom: 85%"> 
      <thead> 
       <tr> 
        <th>Name</th> 
        <th>Code</th> 
        <th>Supplier</th> 

        <!-- BUILT THE CSV FILE HEADER AND STORE IT IN THE $csvData VARIABLE--> 
        <?php $csvData .= "Name,\tCode,\tSupplier\n"?> 
       </tr> 
      </thead> 
      <?php 
       foreach ($data as $q => $v) : 
        // BUILD THE CSV VALUE-DATA AND ADD IT TO THE $csvData VARIABLE 
        // ON EACH ITERATION THROUGH THE FOREACH LOOP. 
        $csvData .= $v['name'] . ",\t" . $v['code'] . ",\t" . $v['supplier'] . "\n"; 
        ?> 
        <tr> 
         <td><? echo $v['name']; ?></td> 
         <td><? echo $v['code']; ?></td> 
         <td><? echo $v['supplier']; ?></td> 
        </tr> 

        <?php 
       endforeach; 
      ?> 
      <input type="hidden" name="csv_text" id="csv_text" value="<?php echo $csvData; ?>"> 
     </table> 

希望....

乾杯と幸運;-)

+0

ありがとうございました。 – user6611859

関連する問題