2016-07-20 2 views
-1

Ich Daten aus einer Datenbank in einer Tabelle abrufen, und ich möchte es exportieren.Exportieren einer leeren CSV-Datei PHP

Dies ist mein Code:

<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> 

Seite getCSV.php:

<?php 

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

Wenn ich auf die Schaltfläche "bei CSV-Export" klicken, um es mir benannt mydata leer gibt Datei.

Hilfe bitte.

Dank

+0

Sie aus dem db in getCSV.php extrahieren sollte es über ein Formular –

+0

Vielen Dank für Ihre Antwort nicht analysieren. Ich musste meine Daten in GetCSV.php zurückgeben? – user6611859

Antwort

0

Sie alle diese in einer einzigen Datei tun (die gleiche Datei, die das Formular enthält). Der Prozess ist sehr einfach ... Innerhalb der foreach Schleife erstellen Sie den Inhalt der zu exportierenden CSV-Datei und speichern sie in einer Variable. Dann setzen Sie den Wert des ausgeblendeten Eingabefeldes (csv_text) auf die Variable. Aber oben im Skript würden Sie überprüfen, ob das Formular übermittelt wurde. Wenn "JA", dann einfach weitermachen und einfach die CSV-Datei bearbeiten (speichern und zum Download anbieten).

Beachten Sie, dass ein neues Eingabefeld der Nutzer zu wählen, um einen bevorzugten Namen für die Datei .... Der folgende Code veranschaulicht die Vorgehensweise zu ermöglichen, wurde hinzugefügt:

<?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> 

this helps ....

Beifall und viel Glück ;-)

+0

Vielen Dank. – user6611859