• ベストアンサー

PHP 検索結果のCSVダウンロード

PHPを使用しています。 管理画面で検索結果を「ダウンロード」ボタン押下で CSV出力させたいのですが、 一度表示させた「検索結果」のみを後からCSV出力させるロジックが不明で困っております。 例えば、ボタン押下で入力フォームの内容でもう一度DBを検索させる? などが 考えられるのですが・・・

noname#152215
noname#152215
  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>検索されるの度にファイルだけは作成しておく >ということでしょうか? まぁ好きなようにしてくださいとしか言いようがないですが 私の触る機会があるシステムでは大きく2つロジックの違うものがあります (1)都度作成 ダウンロードボタンおす→検索する→結果をダイレクトにテキスト出力する これが前回提示した方法 メリットとしては、必要なデータが最短時間で入手できること デメリットは重い処理になると同期処理なのでタイムアウトしてしまうこと (2)作成依頼してゲット 作成ボタンをおす→作成されたデータが一定時間プールされる→ダウンロード ボタンをおす→データがダウンロード&ダウンロードされたフラグを付ける →一定時間が経過したら削除 メリットは非同期処理のためとりあえず放置しておけること、データの再取得にも むだなSQLを走らせる必要がありません デメリットは運用方法によってはプールしておくデータが放置されっぱなしになる 可能性が高いこと 業務で使うなら(2)の方がいいでしょうけど、私が個人で作るときは手っ取り早い (1)を使うケースの方が圧倒的におおいです

noname#152215
質問者

お礼

ご回答ありがとうございました。 サーバに検索結果をファイルで持たせるように致します。

noname#152215
質問者

補足

ご回答ありがとうございます。 >ダウンロードボタンおす→検索する→結果をダイレクトにテキスト出力する これをやりたいのですが、そもそも 「検索する」のときに検索条件をどう設定するのか? で困ってます。 ソースの構成は下記です。 --------------------------- ・コントローラのPHP  --検索ボタン押下時の処理 -> 検索用入力フォームVIEWで検索条件を入力 -> 検索結果表示用VIEWで結果表示  --CSV出力押下時の処理 --------------------------- 最初にフォームに値を入力して検索し、結果を得ても CSV押下時には、フォームに入れた項目は、 検索条件に設定できないのではないかと。。

その他の回答 (2)

回答No.3

方法1  ・検索結果をHTML表示するときに、テンポラリディレクトリにCSVをユニークなファイル名.csvで作る   そのHTML中にテンポラリディレクトリの.csvファイルのリンクを設置しておく  ・テンポラリのCSVファイルは別プロセスで掃除する    (cronまたはCSV生成時用PHP内で、1時間以上経過したファイルを探して消す等) 方法2  ・検索結果のHTML中にCSVのダウンロードボタンを設置し、そのformにhiddenで検索条件を埋めておく  ・CVSダウンロードのPHPでは、再度検索し(この時点ではヘッダはまだ出さない)、   成功すれば、CSV用のヘッダとCSV形式のデータを送出。   検索失敗時は、HTML用のヘッダとエラーメッセージのHTMLを送出 ですかね。

noname#152215
質問者

お礼

ご回答ありがとうございました。 サーバに検索結果をファイルで持たせるように致します。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>もう一度DBを検索させる?  「もう一度」の前段階になにをやっているのかがわかりません。 一度画面上にCSVで出力するのに過不足ないデータを表示するということですか? SQLの場合、キャッシュも期待できるので、一度検索した内容であれば 再検索しても相応のスピードが期待できますね。 ロジックはたんじゅんに以下の流れになるでしょう。 (1)ボタンを押したという情報を得る(ボタンにnameをつけておくなど)→ (2)データ検索する→ (3)ヘッダを吐く→ (4)データを吐く

noname#152215
質問者

補足

(4)データを吐く =>この時点で、実際に「ダウンロード」ボタン押下されるかは 分からないのですが、検索されるの度にファイルだけは作成しておく ということでしょうか? 検索=>ファイルはとりあえず作成=>「ダウンロード」ボタン押下しない場合もある

関連するQ&A

  • PHP→DB→CSV 「ダウンロードできません」

    DBの内容をPHPを使ってCSVに変換してダウンロードするプログラムを使っています。 プログラム(csv.php)の先頭に header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.txt"); header ("Content-Description: File Transfer"); を書いているのですが、いざダウンロードをする画面になるとoutput.csvでなくcsv.phpをダウンロードすることになってしまいダウンロードができません。 表示だけならばっちりでているのですが、、、ファイルタイプがHTMLとなっているのも意味不明です。 だれか助けてください(><

    • ベストアンサー
    • PHP
  • 検索結果をCSVにダウンロードする方法

    いつもお世話になっております。 現在、データベースからある条件で検索をかけ、その結果をCSVにダウンロードさせたいと思っております。ネットでいろいろ探してみましたが、ぴったりくるものがありませんでした。。 今やっていることは、a,b,cというカラムに、それぞれ1,東京,TOKYO 2,大阪,OSAKA 3,東京,TOKYO と入っているとします。 条件はSELECT * FROM table WHERE b = '東京' ORDER BY a; という感じで、一行ずつWEBページに表示させています。 結果↓ ---------------- | a | b | c | |---|----|-----| | 1 |東京|TOKYO| |---|----|-----| | 3 |東京|TOKYO| ---------------- そして、この結果を近くにあるダウンロード(リンク)からCSVに出力したいのです。 ただし、ファイル名は決まっていてもいいのですが、サーバにずっと保存されたりするのはだめなんです。しかも、このDBには、多人数がアクセスし、検索をかけ、その結果をCSVでダウンロードしようと考えているものとします。なので、検索結果をサーバに保存し、そのファイルをダウンロードするというものは、作成したあとに、誰かが検索することで、上書きされ、ことなったファイルになる可能性があります。 ファイル名を時刻などを使い変えたとしてもサーバにファイルがたまっていくのでだめです。 なにか、いいサンプル、アイデアはないでしょうか・・・よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CSVファイルのダウンロード

    <環境> PHP4.3.2 Windows2000 PostgreSQL RedHat Linux <求めていること> DBのデータをCSVファイルに書き出し、 ダウンロードボタン押下で ダイアログがアップしファイル保存ディレクトリ選択、保存。 <現在のソース> サーバーにtest.csvファイル作成後、 現在HTMLでダウンロードボタン押下でdownload.phpを呼び出し <input type=button value="ダウンロード" onClick="location.href='download.php'"> ---------------- download.php ------------------- <?php // 1.ディレクトリ指定 //$filename="/test/test.csv"; // 2.ディレクトリ指定なし $filename = "test.csv"; header("Content-disposition: attachment; filename=$filename"); header("Content-type: application/octet-stream"); ?> ---------------- download.php ------------------- 現在、 1番のディレクトリ指定だと downloadというファイルがダウンロードされるダイアログがアップし ダウンロードされます。 2番のディレクトリ指定なしだと もちろん空のtest.csvファイルがダウンロードされます。 実現したいのは/test/test.csvのファイルをダウンロードすることです。 色々なサイトで探してみて試しているのですが 初心者なもので、行き詰まってしまいました。 申し訳ありませんが ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • html+php+mysql検索画面構成について

    お世話になります。 htmlからphpを呼びmysql結果を表示したいのですが ファイル構成について教えてください。 イメージとしては、下のようなものが1ページに表示されます。 ---------------- ・検索条件入力域 ・検索ボタン ---------------- 検索結果表示域 ---------------- 1.検索結果には初回アクセス時に条件なしの結果が表示されます。 2.検索ボタンを押下すると、検索結果のみ再描画されます。 このような処理をしたいのですが、ファイル構成としてはどうすればよいでしょうか。 今考えているのは main.html ----------- 検索フォーム記載 -- (1) 検索.php呼び出し(初期表示 ----------- 検索.php --------- mysqlからデータ取得し出力 --------- です。 ここでイメージができないのですが 検索ボタン押下時に呼ぶファイルは別途作成する必要がありますか? 仮に検索.phpに渡すとしたら、検索.php内にmain.htmlの(1)を記載しなくては いけないのではと思ってます。 もっとスマートな構成があると思うので、熟練者の方ご教示お願いします。

    • ベストアンサー
    • HTML
  • ファイルをダウンロードしたい

    PHPでDBから取ってきたデータをエクセルに出力し、ダウンロードさせる プログラムを書いていますが、うまくいきません。 処理の流れは以下のようになっています。 ----------------------------------------------------- ◇top.php(ダウンロードボタン押下) ↓ ◇action.php実行 さらにこの中で、 ・logic.php実行→DBからデータ取得 ・excel.php実行(ダウンロードボタン押下時のみ) logicからデータをもらってエクセルファイル生成。 header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"$filename\""); ・view.php実行→Smartyでtop.phpの画面表示(top.tpl) (logicからviewに値を渡してデータを画面表示) ----------------------------------------------------- この処理だと、ダウンロードされるファイルが生成したものでなく、 top.phpをダウンロードしてしまうんです。(中身はHTMLですけど。) 同じような質問がありましたが、結局どうしたらいいのか・・ http://oshiete1.goo.ne.jp/kotaeru.php3?q=1432459 top.phpにはデータを表示していて、ダウンロードボタンも付いている って感じです。ボタンを押した時の挙動をどうしたらいいのか、いまいち 分かりません。 よろしくお願いします。

    • 締切済み
    • PHP
  • php、html フォーム入力→送信後にクリア

    htmlで入力フォーム設置、送信ボタンでsubmit→phpファイル実行、 そしたらフォームに入力したテキストを消したいです。 phpでの実行内容は、 フォームに入力されたIDを検索条件としてクエリ実行、 結果をCSVでダウンロード、 というものです。 よろしくお願い致します。

  • CSVを条件付きで検索

    楽曲検索システムを構築中なのですが上手くできません。 どなたかプログラムして頂ければ幸いです。 プログラミング言語は、CGI、PHPのどちらでもOKです。 data.csv アーティスト名,曲名,アーティスト頭文字 秋川雅史,千の風になって,あ いきものがかり,ありがとう,い 宇多田ヒカル,FirstLove,う index.html 検索キーワードを入力するフォームと検索条件(アーティスト名、曲名)を選ぶ、ラジオボタンを表示。 search.php 1.data.csvを検索し、該当データを含む行を結果として表示。(アーティスト頭文字は除く) 2.index.htmlのラジオボタンが曲名だったら、曲名の列だけ検索。アーティスト名も同様。 3.アーティスト頭文字はアーティスト名と同時に検索に用いますが、結果には表示しない。 4.結果は見やすいよう、テーブルに出力。 5.該当がなければ、「該当するデータはありません」と表示。 要するにhttp://utauga.jp/karaoke/のような検索システムを構築できればOKです。 少し複雑ですが、よろしくお願いします。 不明な点は、質問して頂ければ回答します。

    • 締切済み
    • PHP
  • 検索結果の出力後、それをTXTに保存するボタンを追加したい

    [環境] IIS 5.1 (XP SP2)+PHP 5.0.4 Win+MySQL mysql 4.0.14b Win フレームで横に分割して、 上段に検索フォーム、検索ボタンを押下(POST)すると、 DBから結果をSELECTして下段にタブ区切りテキストが出力されるような 仕組みを作りました。 ------------------------ [100]以上[300]以下         [検索]    ←form.htm ------------------------ 111 \t 221 \t 331 112 \t 222 \t 332      ←result.php 113 \t 223 \t 333 ------------------------ 検索ボタンを押下すると、「保存」ボタンが現れ、 それをを押すと参照ダイアログが現れ、 出力結果を(*.txt)として保存できるようにしたいのですが、 このような仕組みの敷居は高い・・・でしょうか。 ■わたしの知識レベル: HTMLタグ打ち、初歩的なSQLを理解できる程度、PHP他プログラミング知識なし よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpでcsvダウンロードできない

    phpで配列をCSV にしてボタンを押すとブラウザからダウンロードさせたいのですが、 htmlタグで表示した後に、ボタンを押すとブラウザからダウンロードさせるには、以下の ヘッダーをhtmlタグより下につけると、機能しなくなってダウンロードできなくなって しまっています。 どうしたらいいのでしょうか。 header('Content-Type:application/octet-stream'); header('Content-Disposition:attachment;filename=data.csv');

    • ベストアンサー
    • PHP
  • PHPのサイト内検索の結果をCSVに書き出すには

    Webサイトのサイト内検索が、どれくらい使用されているか調べるため、 検索結果をCSVで書き出したいと考えております。 php初心者のため、苦戦しております。 詳しい方がいらっしゃいましたら、ご教示ください。 サイトはCodeIgniter(コードイグナイター)を使用しており、PHP5.3.3です。 サイト内検索の仕組みは、form actionを使用しており、 htmlに記載のコードは以下です。 ------------------------------------------------------------------------------------------------------- <form action="search.php" method="get" data-form-id="keyword_webcode-search"> <input name="keyword_webcode" type="text" value="" rel="キーワード検索出来ます。"><br> <input type="submit" value="データを送信"> </form> ------------------------------------------------------------------------------------------------------ データ送信先のsearch.phpに書き出すためのコードを追加しておりますが、 何も起こりません。 コードを追加するファイルが間違っているのでしょうか? 追加したコードは以下です。 ------------------------------------------------------------------------------------------------------- $csv = fopen('file.csv', 'a'); fputcsv($csv, $ShiftJIS); fclose($csv); ------------------------------------------------------------------------------------------------------- 色々試してみましたが、うまく行かず行き詰まっています。 どなたかアドバイスいただければと思います。 よろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう