どもです。
結果をcsvに蓄積保存する、phpのアンケートフォームを作りました。
フォーム自体のやり方は数多くの先駆者サイトがありますので置いておいて、
結果をcsvで保存するphpを晒します。
csvに書き込む動作はphpで完璧にサポートされている
たったの、3行のphpでcsvに書き込むことができます。
$csv = fopen('file.csv', 'a');
fputcsv($csv, $_POST);
fclose($csv);
① fopen で書き込み先ファイル(file.csv)と書き込みモード(a)を指定する
② fputcsv で書き込みたい配列($_POST)を指定して、実際にcsvに書き込む
③ fclose でcsvファイルを閉じて終了
以上です。
こちらについて詳しい解説は、こちらのサイト様がわかりやすい。
デザイン五輪書【収集したデータをPHPでCSVファイルとして出力する方法】
で、この書き込みモードについては、
モード | 動作 | ファイルがあるとき | ファイルがないとき |
---|---|---|---|
"r" | 読み出し専用 | 正常 | エラー(NULL返却) |
"w" | 書き込み専用 | サイズを 0 にする(上書き) | 新規作成 |
"a" | 追加書き込み専用 | 最後に追加する | 新規作成 |
"r+" | 読み込みと書き込み | 正常 | エラー(NULL返却) |
"w+" | 書き込みと読み込み | サイズを 0 にする(上書き) | 新規作成 |
"a+" | 読み込みと追加書き込み | 最後に追加する | 新規作成 |
初心者のためのポイント学習C言語【第17章 ファイル入出力】より引用
こんな風になっているそうです。
やりたい動作によってモードを変えると良いでしょう。
今回はアンケートフォームが送信されるたびに、逐次追加していきたいので、"a"です。
Excelでcsvを開くための文字コード解決
以上、たった3行で無事にcsvに書き込めてめでたしめでたし……
と言いたいところですが、このままでは実用的ではありません。
csvを開くソフトウェアにはだいたいExcelが選ばれますが、Excelの文字コードはShift JISです。
今どきのサイトは、だいたいが文字コードUTF-8です。
php を動かすにも、 Shift JISは都合が悪い。
対策なしだとExcelで開いたときに盛大に文字化けします。
ですので、csvに書き込む前に、配列の文字コードをShift JISに変えてしまいます。
mb_convert_variables('Shift_JIS', 'UTF-8', $_POST);
新しい配列を作るのではなく、指定した配列の文字コードを変更してしまうので注意です。
現実的には、専用の新しい配列に現在の配列をコピーしてから行うのが妥当かと思います。
mb_convert_variables についてはこちらのサイト様がわかりやすい。
トミリュウ・コム【PHP:配列変数まとめて文字コード変換したいならmb_convert_variables()使うといいよ】
結果、5行で終了。
$ShiftJIS = $_POST; //文字コードを変えるので、専用の配列を作成してコピー
mb_convert_variables('Shift_JIS', 'UTF-8', $ShiftJIS); //文字コードをUTF-8からShiftJISに変更
$csv = fopen('file.csv', 'a'); //csvファイルと書き込みモードを指定
fputcsv($csv, $ShiftJIS); //変換した配列をcsvファイルに書き込み実行
fclose($csv); //csvファイルを閉じる
以上です。
php、便利ですね。