PHP:MYSQLから取得した値をCSV形式で保存する
html、jsは共通です。
※今回こちらの問題により、わざとHTMLとPHPを分けています。
以下のソースを改造してください。
csv.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja"> <head> <title>CSVダウンロード画面作成</title> <script src="top0001.js"></script> </head> <body> CSVダウンロードを行う。 <form method="POST" action="<?php $_SERVER['PHP_SELF']?>"> <input type="hidden" value="csv1" name="csv01"> <input type="submit" value ="CSVダウンロード" onClick="conf01()"> </form> </body> </html>
※$_SERVER['PHP_SELF'] これを自分の遷移したいところに変えます。
Jacascript
// confirm
function conf01(){if(window.confirm('ダウンロードしますか?')){
document.forms[0].submit();
}else{
window.alert('キャンセルされました。');
}
}
※必要ないかも知れませんが今回はJavaScriptでconfirmかけてます。いらない時は使わないでOK。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
これからがPHPファイルです。上記のHTMLを一番したでincludeしてます。
以下のファイルを適当な名前に保存して、使ってください。
MYSQLのコネクト情報、DB名、テーブル名は自分の環境に合った値を入れてください。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1、決まったフォルダにCSVファイルを保存する場合
<?php //submitボタンが押され、hiddenで持たせた値がPOSTされたら処理が始まります。 if(isset($_POST['csv01'])){ $srv = "localhost"; // サーバー名 $id = "username"; // ユーザーID $passwd = "username"; // パスワード $dbn = "database"; // データベース名 $sql = "SELECT * FROM csv"; // SQL文 //DBコネクト $db=mysql_connect($srv,$id,$passwd); //DBセレクト mysql_select_db($dbn,$db); //本処理 $todate = "./download/" . date("Ymd_His"); $file_name = $todate."test3.csv"; $fp = fopen( $file_name, "w" ); /* ヘッダの作成 */ $contents = "\"SQE\",\"NAME\",\"PASSWORD\",\"F_NAME\",\"S_NAME\"\n"; fputs($fp, $contents); $query = mysql_query($sql); while($row = mysql_fetch_assoc($query)){ $contents = "\"" . $row["seq"] . "\",\"" . $row["name"] . "\",\"" . $row["password"] . "\",\"" . $row["f_name"] . "\",\"" . $row["s_name"] . "\"\n"; fputs($fp, $contents); } fclose( $fp ); } //HTMLファイル読み込み include "csv.html"; ?>
用はファイルを作成して、その拡張子を.csvにする方法です。
これなら確かに、色々カスタマイズすることが可能です。
あるテーブルの全てをCSV出力するのではなく、取得した後に、値を加工したい場合はこちらのほうがいいかも
知れません。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
2、ダウンロードボタンを容易し、直接クライアントPCに保存する場合。
<?php //submitボタンが押され、hiddenで持たせた値がPOSTされたら処理が始まります。 if(isset($_POST['csv01'])){ header("Content-Type: application/octet-stream"); $todate = date("Ymd_His"); header("Content-Disposition: attachment; filename=$todate.csv"); $srv = "localhost"; // サーバー名 $id = "username"; // ユーザーID $passwd = "userpass"; // パスワード $dbn = "database"; // データベース名 $sql = "SELECT * FROM csv"; // SQL文 //DBコネクト $db=mysql_connect($srv,$id,$passwd); //DBセレクト mysql_select_db($dbn,$db); //クエリ $rs=mysql_query($sql,$db); //ヘッダー作成 print "\"SQE\",\"NAME\",\"PASSWORD\",\"F_NAME\",\"S_NAME\"\n"; //値を取得 while($row = mysql_fetch_assoc($rs)){ //本文出力 print("\"" . $row["seq"] . "\",\"" . $row["name"] . "\",\"" . $row["password"] . "\",\"" . $row["f_name"] . "\",\"" . $row["s_name"] . "\"\n"); } mysql_close($db); } //HTMLファイル読み込み include "csv.html"; ?>
こちらは冒頭の
Content-Type: application/octet-streamと
Content-Disposition: attachment; filename=$todate.csvが重要です。
詳しいところは調べてください。
この二つのヘッダーをつけることにより、ファイル内でのprintが出力ファイルになり、
クライアントが保存できるようになります。
filename=$todate.csvファイル名は今日の日付にし、DBから取得した値を
.csvファイルとしてダウンロードできるようになります。
※しかし、この方法だとincludeしているファイルまでCSVで保存されますので、
実装する際にはCSVをダウンロードだけするようにしてください。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
3、MYSQLから直接フォルダに保存する場合
select * from csv into outfile "c:\/csvtemp/dump.csv" fields terminated by ',' enclosed by '"' lines terminated by '\r\n';