PHPで、CSVファイルを作成してダウンロードする方法をご紹介します。
データーベース(MYSQL)の値を、「CSVダウンロード」ボタンをクリックして、ダウンロードします。
MYSQLにテーブル作成
MYSQLにデータを準備します。
テーブルの構造です。
コード
PHPとHTMLを作成します。
sample.php
<?php
//データベース接続
$dsn='mysql:dbname=sample;host=localhost;charset=utf8';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//実行
$sql='SELECT * FROM fruit WHERE 1';
$rec = $dbh->prepare($sql);
$rec->execute();
$rec_list = $rec->fetchAll(PDO::FETCH_ASSOC);
//「CSVダウンロード」クリック時
if (isset($_POST['csvoutput'])) {
//現在の日時
$now = new DateTime();
//全データ取得
$mycsv = $dbh->prepare("SELECT * FROM fruit");
$mycsv->execute();
$rec_mycsv = $mycsv->fetchAll(PDO::FETCH_ASSOC);
// ファイル名
$csvfilename="";
$csvfilename .= 'sample-';
$csvfilename .= $now->format('Ymd');
//CSVファイル名、出力情報の設定
$fileNm = $csvfilename.".csv";
$csvstr = "";
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$fileNm);
header("Content-Transfer-Encoding: binary");
//各タイトル行
$csvstr .=mb_convert_encoding("受付ID", "SJIS", "UTF-8"). ",";
$csvstr .=mb_convert_encoding("名前", "SJIS", "UTF-8"). ",";
$csvstr .=mb_convert_encoding("規格", "SJIS", "UTF-8"). ",";
$csvstr .=mb_convert_encoding("在庫", "SJIS", "UTF-8"). ",";
$csvstr .=mb_convert_encoding("在庫状況", "SJIS", "UTF-8"). ",";
$csvstr .=mb_convert_encoding("登録日", "SJIS", "UTF-8"). ",";
$csvstr .=mb_convert_encoding("備考", "SJIS", "UTF-8"). "\r\n";
//CSV生成
foreach ($rec_mycsv as $row):
$row = mb_convert_encoding($row, "SJIS", "UTF-8");
//「規格」の列は頭0が消えないように頭にイコール付ける
//「備考」の列は改行が消えないように「str_replace」関数を使用
$csvstr .= $row['f_id'] . ",";
$csvstr .= $row['f_name'] . ",";
$csvstr .= '="'.$row['f_kikaku']. '"'. ",";
$csvstr .= $row['f_zaiko'] . ",";
$csvstr .= $row['f_status'] . ",";
$csvstr .= date('Y/m/d H:i:s', strtotime($row['f_date'])) . ",";
$csvstr .= '"' . str_replace('"', '""', $row['f_bikou']) . '"' . "\t" . "\r\n";
endforeach;
echo $csvstr;
exit();
}
//データベース切断
$dbh=null;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<!--CSVダウンロード-->
<form action="sample.php" method="post">
<button name="csvoutput" onclick="proc1();" type="submit">CSV ダウンロード</button>
</form>
<br />
<table border="1" style="border-collapse: collapse">
<tr>
<th>ID</th>
<th>名前</th>
<th>規格</th>
<th>在庫</th>
<th>在庫状況</th>
<th>登録日</th>
<th>備考</th>
</tr>
<!--MySQLデータを表示-->
<?php foreach ($rec_list as $rec) { ?>
<tr>
<td><?php echo $rec['f_id'];?></td>
<td><?php echo $rec['f_name'];?></td>
<td><?php echo $rec['f_kikaku'];?></td>
<td><?php echo $rec['f_zaiko'];?></td>
<td><?php echo $rec['f_status'];?></td>
<td><?php echo $rec['f_date'];?></td>
<td><?php echo $rec['f_bikou'];?></td>
</tr>
<?php } ?>
</table>
</body>
</html>
結果
WEB画面の「CSVダウンロード」をクリックします。
CSVデータを出力できました。
「mb_convert_encoding」を使用することにより、文字化けを防いでいます。
この記事がお役に立ちますと幸いです。
PHPとMYSQLで検索機能を実装する:今すぐできる!
...
「1週間でPHPの基礎が学べる本」
1週間でPHPがちょっとだけ使えるようになれる!
わかりやすい!と評判の良い参考書です
リンク