phpでCSVデータの内容を検索するで、CSVデータの内容を検索してhtmlに表示するところまでメモしました。ここから、表示したhtmlの内容をCSVデータで出力したいと、追加のリクエスト…..色々、頭を抱えて試行錯誤….なんとか出力できたので、せっかくだからメモ。
phpでCSVデータの内容を検索するである期間問合せしたユーザーをCSVBから検索するプログラムをメモしました。ざっくり言うと、登録年月日をGETで取得して表示するというものです。検索結果の要件やプログラムについては、phpでCSVデータの内容を検索するで確認してください。
登録年月日をGETで取得
GETの変数は以下になります。
$start = $_GET['start']; $end = $_GET['end'];
該当のCSVデータ
CSVデータ名はcsv/contact.csvで、フォーマットは以下になります。
登録年月日,会員氏名,メールアドレス,都道府県, 20211001,山田太郎,taro@sample.com,東京都, 20211010,山田花子,hanako@sample.com,東京都, 20211020,日本太郎,n.taro@sample.com,神奈川県, 20211101,日本花子,n.hanako@sample.com,千葉県,
phpでCSVデータの内容を検索するで、登録年月日2021年10月1日〜2021年10月10日までのデータを取得しました。
取得したデータ
20211001,山田太郎,taro@sample.com,東京都, 20211010,山田花子,hanako@sample.com,東京都,
検索結果として表示
これをHTMLに検索結果として表示しました。
<table> <tr> <th>登録年月日</th> <th>会員氏名</th> <th>メールアドレス</th> <th>都道府県</th> </tr> <tr> <th>20211001</th> <th>山田太郎</th> <th>taro@sample.com</th> <th>東京都</th> </tr> <tr> <th>20211010</th> <th>山田花子</th> <th>hanako@sample.com</th> <th>東京都</th> </tr> </table>
とここまでがphpでCSVデータの内容を検索するの内容です。
CSV生成プログラム
検索結果にCSV生成プログラムへのリンクを設定します。
<table> <tr> <th>登録年月日</th> <th>会員氏名</th> <th>メールアドレス</th> <th>都道府県</th> </tr> <tr> <th>20211001</th> <th>山田太郎</th> <th>taro@sample.com</th> <th>東京都</th> </tr> <tr> <th>20211010</th> <th>山田花子</th> <th>hanako@sample.com</th> <th>東京都</th> </tr> </table> <br><br> <a href="https://www.example.net/csv.php?start=20211001&end=20211010" target="_blank">CSVをダウンロードする</a>
CSVに出力する
リンク先のcsv.phpを作成します。
csv.php
<?php $start = $_GET['start']; $end = $_GET['end']; $csv_file="csv/contact.csv"; $openfile = file_get_contents($csv_file); $csv_gyo = explode("\n", $openfile); //出力するCSVデータのファイル名 $datename=date("Ymdhis"); $download_file=$start."_".$end."_".$datename.".csv"; header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=$download_file"); header("Content-Transfer-Encoding: binary"); // 変数初期化 $csv = null; // 1行目のヘッダを作成 $csv = '"登録年月日","会員氏名","メールアドレス","都道府県"'."\n"; // 出力データ生成 foreach( $csv_gyo as $value ) { list($ymd_data,$name,$mail,$pref) = explode(",", $value); if($ymd_data =="登録年月日" || $ymd_data ==""){ print <<<EOF EOF; } elseif(($end>=$ymd_data) && ($start<=$ymd_data)){ $csv .= '"'.$ymd_data.'","'.$name.'","'.$mail.'","'.$pref.'"'."\n"; } } echo $csv; return; ?>
CSVデータのファイル名
ファイル名は以下で設定します。
$datename=date("Ymdhis"); $download_file=$start."_".$end."_".$datename.".csv";
ファイルのダウンロード
ファイルの強制ダウンロード設定をします。
header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=$download_file"); header("Content-Transfer-Encoding: binary");
CSVヘッダを生成する
CSVデータのヘッダを以下で設定します。
$csv = '"登録年月日","会員氏名","メールアドレス","都道府県"'."\n";
出力データ生成する
foreach関数で該当のCSVデータを読み、さらにGETで得た条件のデータのみ抽出します。
foreach( $csv_gyo as $value ) { list($ymd_data,$name,$mail,$pref) = explode(",", $value); if($ymd_data =="登録年月日" || $ymd_data ==""){ print <<<EOF EOF; } elseif(($end>=$ymd_data) && ($start<=$ymd_data)){ $csv .= '"'.$ymd_data.'","'.$name.'","'.$mail.'","'.$pref.'"'."\n"; } }
CSVを出力する
最後にCSVデータを出力します。
echo $csv; return;
出力されたCSVデータを確認
検索条件は登録年月日2021年10月1日〜2021年10月10日までのデータですから、生成されたCSVデータの内容が以下になっていればOKです。
登録年月日,会員氏名,メールアドレス,都道府県, 20211001,山田太郎,taro@sample.com,東京都, 20211010,山田花子,hanako@sample.com,東京都,
以上です。
色々応用できそうです。
これか研究します。