電子書籍の厳選無料作品が豊富!

phpでiniファイルに定義したSQL文とパラメタを読んで抽出結果を画面表示する、もしくはCSV出力するという汎用スクリプトを作成中です。

[dbselect.php]
iniファイル上の定義情報を読み、フォームで条件パラメタを入力させて、dbget.phpに渡す
(条件パラメタの中には、データベースの選択条件に加え、画面表示かCSV出力かの選択も含む)

[dbget.php ]
postで受け取った値でエラーチェックを行い、
エラーがある場合は、エラーのある選択条件と原因を画面表示、
エラーの無い場合は、条件パラメタに従い、画面表示、もしくはCSVに出力

という仕様です。画面表示をするまでは凡そ出来上がっています。

CSVを出力する時には、<tr><td>等のテーブルタグを出力せず、
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename={$down_file}");
header("Content-Type: text/csv; charset=Shift_JIS ");
echo $csv_data;
のようにヘッダファイルを出力すれば済むと思ったのですが、画面表示するために、
すでに先頭部分でヘッダファイルは出力済みです。

こんな処理分岐をしようと思ったら、ヘッダファイルの異なるスクリプトをもう一つ作るしか方法は無いでしょうか?(画面表示用とCSV出力用)

本来ならエラーチェックは選択側でJavascriptで行うべきなのかもしれませんが、
定義ファイルから読み取った情報で処理する必要があり、そこまでの知識が無いので断念しました。

出来れば、二重管理をしたくないため、何か方法があればと思い質問させて頂きました。
よろしくお願いします。

A 回答 (1件)

内部データは配列で持てば、CSVに出力する際も


fputcsvで一度テンポラリを介して出力すればいいでしょう。
出力方法だってテーブルに出す以外にエクセルやpdfデータに
出力したいことだってあるでしょうから、元データは一元化しておけばよいかと
    • good
    • 0
この回答へのお礼

コメント有難うございました。

一旦メモリ上の配列に落としてから、htmlにするか、CSVにするかを決めるということですね。
データサイズが大きくなるとどうも不安があるので、躊躇していました。
件数の制約を設けるか、メモリ上でなく、CSVで吐き出すか考えてみます。

お礼日時:2016/05/02 15:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!