これらはすべて単一のファイル(フォームを含む同じファイル)で実行できます。プロセスは非常に簡単です... 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>
希望....
乾杯と幸運;-)
あなたは、getCSV.phpでDBから抽出フォームからあなたの答えのための –
おかげでそれを解析してはいけません。 GetCSV.phpでデータを返さなければならなかったのですか? – user6611859