最近お問合せフォームをつくったんですが、登録後CSVデータを生成するようにしています。
そこで、クライアントからリクエスト。
「CSVデータの中からある期間お問い合わせしたユーザーをWEBで検索するようにしてほしい」エクセルでも可能ですが、データをダウンロードせずに検索したいと….
で、つくったのでメモします。
CSVデータの内容
今回検索対象となるCSVサンプルデータをみてみます。
登録年月日,会員氏名,メールアドレス,都道府県, 20211001,山田太郎,taro@sample.com,東京都, 20211010,山田花子,hanako@sample.com,東京都, 20211020,日本太郎,n.taro@sample.com,神奈川県, 20211101,日本花子,n.hanako@sample.com,千葉県,
まあ、実際にはもっと情報は多いのですが、ざっくり言うとこんなかんじです。
検索要件
登録年月日で情報をソートします。
例えば、「2021年10月1日」〜「2021年10月10日」までに登録したユーザーをヒットさせたいわけです。
プログラム
早速プログラムを構築します。
今回は検索用のHTMLは省略します。
GETで期間情報を取得して、検索結果を表示したいと思います。
<?php $start = $_GET['start']; $end = $_GET['end']; $csv_file="csv/contact.csv"; $openfile = file_get_contents($csv_file); $csv_gyo = explode("\n", $openfile); ?> <!DOCTYPE html> <html lang="ja"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>テスト</title> <meta name="viewport" content="initial-scale=1"> </head> <body> <table> <tr> <th>登録年月日</th> <th>会員氏名</th> <th>メールアドレス</th> <th>都道府県</th> </tr> <?php foreach($csv_gyo as $value) { list($ymd_data,$name,$mail,$pref) = explode(",", $value); $table_list=<<<END <tr> <td>$ymd_data</td> <td>$name</td> <td>mail</td> <td>pref</td> </tr> END; if($ymd_data =="登録年月日" || $ymd_data ==""){ print <<<EOF EOF; } elseif(($end>=$ymd_data) && ($start<=$ymd_data)){ print <<<EOF $table_list EOF; } } ?> </table> </body> </html>
GETで取得する
今回は、GETで登録年月日を取得します。その際、以下のようなURLになります。
https://www.example.net/search.php?start=20211001&end=20211010
で、$_GETで取得します。
$start = $_GET['start']; $end = $_GET['end'];
CSVデータを読み込む
該当のCSVデータはcsv/contact.csvです。それをfile_get_contentsで読み込みます。
$csv_file="csv/contact.csv"; $openfile = file_get_contents($csv_file); $csv_gyo = explode("\n", $openfile);
CSVデータを表示する
GETで取得した情報を表示するにあたり、foreach関数にif文を入れて検索結果を表示する設定をします。
foreach($csv_gyo as $value) { list($ymd_data,$name,$mail,$pref) = explode(",", $value); $table_list=<<<END <tr> <td>$ymd_data</td> <td>$name</td> <td>mail</td> <td>pref</td> </tr> END; if($ymd_data =="登録年月日" || $ymd_data ==""){ print <<<EOF EOF; } elseif(($end>=$ymd_data) && ($start<=$ymd_data)){ print <<<EOF $table_list EOF; } }
該当のCSVデータには「登録年月日」等のヘッダ情報が入ってます。そのままだと、ヘッダも表示されるので以下で表示されない用意します。
if($ymd_data =="登録年月日" || $ymd_data ==""){
その上で登録年月日に応じた検索結果を表示します。
elseif(($end>=$ymd_data) && ($start<=$ymd_data)){
これで、登録年月日2021年10月1日〜2021年10月10日までのデータを表示します。
出力結果
<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>
以上です。
ここまでくると、検索結果をCSVでダウンロードしたいなんてリクエストもあったりします。
次回、その辺もメモしたいと思います。