PHPを使用しています。

管理画面で検索結果を「ダウンロード」ボタン押下で
CSV出力させたいのですが、
一度表示させた「検索結果」のみを後からCSV出力させるロジックが不明で困っております。

例えば、ボタン押下で入力フォームの内容でもう一度DBを検索させる? などが
考えられるのですが・・・

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>検索されるの度にファイルだけは作成しておく


>ということでしょうか?

まぁ好きなようにしてくださいとしか言いようがないですが
私の触る機会があるシステムでは大きく2つロジックの違うものがあります

(1)都度作成
ダウンロードボタンおす→検索する→結果をダイレクトにテキスト出力する
これが前回提示した方法

メリットとしては、必要なデータが最短時間で入手できること
デメリットは重い処理になると同期処理なのでタイムアウトしてしまうこと

(2)作成依頼してゲット
作成ボタンをおす→作成されたデータが一定時間プールされる→ダウンロード
ボタンをおす→データがダウンロード&ダウンロードされたフラグを付ける
→一定時間が経過したら削除

メリットは非同期処理のためとりあえず放置しておけること、データの再取得にも
むだなSQLを走らせる必要がありません
デメリットは運用方法によってはプールしておくデータが放置されっぱなしになる
可能性が高いこと

業務で使うなら(2)の方がいいでしょうけど、私が個人で作るときは手っ取り早い
(1)を使うケースの方が圧倒的におおいです

この回答への補足

ご回答ありがとうございます。

>ダウンロードボタンおす→検索する→結果をダイレクトにテキスト出力する
これをやりたいのですが、そもそも
「検索する」のときに検索条件をどう設定するのか?
で困ってます。

ソースの構成は下記です。
---------------------------
・コントローラのPHP
 --検索ボタン押下時の処理
-> 検索用入力フォームVIEWで検索条件を入力
-> 検索結果表示用VIEWで結果表示

 --CSV出力押下時の処理
---------------------------

最初にフォームに値を入力して検索し、結果を得ても
CSV押下時には、フォームに入れた項目は、
検索条件に設定できないのではないかと。。

補足日時:2011/04/20 16:29
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/04/22 16:49

方法1


 ・検索結果をHTML表示するときに、テンポラリディレクトリにCSVをユニークなファイル名.csvで作る
  そのHTML中にテンポラリディレクトリの.csvファイルのリンクを設置しておく
 ・テンポラリのCSVファイルは別プロセスで掃除する
   (cronまたはCSV生成時用PHP内で、1時間以上経過したファイルを探して消す等)

方法2
 ・検索結果のHTML中にCSVのダウンロードボタンを設置し、そのformにhiddenで検索条件を埋めておく
 ・CVSダウンロードのPHPでは、再度検索し(この時点ではヘッダはまだ出さない)、
  成功すれば、CSV用のヘッダとCSV形式のデータを送出。
  検索失敗時は、HTML用のヘッダとエラーメッセージのHTMLを送出

ですかね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/04/22 16:49

>もう一度DBを検索させる? 



「もう一度」の前段階になにをやっているのかがわかりません。
一度画面上にCSVで出力するのに過不足ないデータを表示するということですか?
SQLの場合、キャッシュも期待できるので、一度検索した内容であれば
再検索しても相応のスピードが期待できますね。

ロジックはたんじゅんに以下の流れになるでしょう。

(1)ボタンを押したという情報を得る(ボタンにnameをつけておくなど)→
(2)データ検索する→
(3)ヘッダを吐く→
(4)データを吐く

この回答への補足

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

検索=>ファイルはとりあえず作成=>「ダウンロード」ボタン押下しない場合もある

補足日時:2011/04/19 16:11
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QN-04CのGoogle検索履歴の削除

ホーム画面上にあるGoogle検索で、文字を入力しようとすると過去の検索履歴が表示されるのですが、この検索履歴を削除する方法を教えて下さい。

(1)Google検索ウィジェットをタップし、検索画面をひらきます
 →このときに表示される検索履歴を削除したいのです!
(2)MENUボタン押下
(3)「検索設定」押下
(4)「Google検索の設定」押下
(5)「入力候補の表示」にチェックを入れない
 →チェックを入れない場合、「検索履歴」はグレーになっていて押下できない。
以上の操作では検索履歴は削除されません。
仮に、
(5)「入力候補の表示」にチェックを入れる
 →「検索履歴」はチェック入れられるようになるが、検索履歴を表示したくないので、チェックは入れない。
というようにしても検索履歴は残ったままで削除されません。
さらに、「検索履歴の管理」を押下すると「ウェブ履歴を利用すれば、検索がさらに便利に」というサイトが開きますが、このサイトから行えば検索履歴が削除されるのか不明です。
よろしくお願い致します。

Aベストアンサー

履歴消しゴムを使わないと削除出来ないです。
履歴消しゴム
https://play.google.com/store/apps/details?id=jp.androdev.historyeraser&feature=search_result#?t=W251bGwsMSwxLDEsImpwLmFuZHJvZGV2Lmhpc3RvcnllcmFzZXIiXQ..

QPHP→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となっているのも意味不明です。
だれか助けてください(><

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で...続きを読む

Aベストアンサー

header("Pragma: public");

を追加してみたらどうでしょうか?

Q検索履歴の削除

gooでもyahooでも検索の履歴の削除の仕方がわかりません・・・
ツールで閲覧履歴の削除はできるのですが検索履歴が削除されません!!
どうしたらいいんでしょうか???

Aベストアンサー

こちらの方法で如何ですか
http://121ware.com/qasearch/1007/app/servlet/qadoc?QID=003076
http://121ware.com/qasearch/1007/app/servlet/qadoc?QID=009174

Q検索結果を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でダウンロードしようと考えているものとします。なので、検索結果をサーバに保存し、そのファイルをダウンロードするというものは、作成したあとに、誰かが検索することで、上書きされ、ことなったファイルになる可能性があります。
ファイル名を時刻などを使い変えたとしてもサーバにファイルがたまっていくのでだめです。

なにか、いいサンプル、アイデアはないでしょうか・・・よろしくお願いいたします。

いつもお世話になっております。

現在、データベースからある条件で検索をかけ、その結果をCSVにダウンロードさせたいと思っております。ネットでいろいろ探してみましたが、ぴったりくるものがありませんでした。。

今やっていることは、a,b,cというカラムに、それぞれ1,東京,TOKYO
2,大阪,OSAKA
3,東京,TOKYO

と入っているとします。

条件はSELECT * FROM table WHERE b = '東京' ORDER BY a;
という感じで、一行ずつWEBページに表示させています。

結果↓
----------------
| a | b | ...続きを読む

Aベストアンサー

私が良く使うのは、PHPで クエリーを実行して、そのファイルをcsvとして渡すとCSV のダウンロードに出来ますよ。
大雑把には、以下のような感じ

<?php
header("Pragma: cache;");
header("Content-type:application/x-csv");
header("Content-Disposition: inline; filename=db_out.csv"); // ダウンロードするさいのファイル名になります

mb_language ('Japanese');

// 表題欄の出力

$dsn = "{$config["dbtype"]}://{$config["dbuser"]}:{$config["dbpasswd"]}@{$config["dbroot"]}/{$config["dbname"]}";

$query = "SELECT * FROM XXXX ORDER BY id ASC";

// データベースに接続
$conn =& DB::connect($dsn);
// 接続に失敗したらエラー表示して終了
if (DB::isError($conn)) exit($conn->getMessage());
$result =& query_exec($conn,$query);

while ($record = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
$csv_line =&sprintf("%s,%s\n"
,$record['XXXX']
,$record['ZZZZ']);
print(mb_convert_encoding($csv_line, "SJIS", "EUC-JP"));
}
$result->free();

// データベースとの接続切断
$conn->disconnect();
unset($conn);

?>

私が良く使うのは、PHPで クエリーを実行して、そのファイルをcsvとして渡すとCSV のダウンロードに出来ますよ。
大雑把には、以下のような感じ

<?php
header("Pragma: cache;");
header("Content-type:application/x-csv");
header("Content-Disposition: inline; filename=db_out.csv"); // ダウンロードするさいのファイル名になります

mb_language ('Japanese');

// 表題欄の出力

$dsn = "{$config["dbtype"]}://{$config["dbuser"]}:{$config["dbpasswd"]}@{$config["dbroot"]}/{...続きを読む

Q検索履歴の削除

Yahooで、いつも検索しているのですが、
パソコンによって、検索の窓をダブルクリックすると過去の検索文字が残っているパソコンがあります。
アドレス欄は空っぽで、残っていません。
ちなみに0SはXPです。
人に私の検索履歴を見て欲しくないので、削除したいのですが、
履歴の削除は知っていますが、検索履歴の削除がわかりません。
削除方法を教えていただけないでしょうか。
よろしくお願いいたします。

Aベストアンサー

はじめまして。

>履歴の削除は知っていますが、検索履歴の削除がわかりません。

オートコンプリートの事ですね。

以下の様に「オートコンプリートをクリア」して下さい。↓
http://www.katch.ne.jp/~aok/contents/privacy_security/018.html
また、
今後使用しないのであれば
「オートコンプリートの使用目的」の(レ)をはずして下さい。

Qphpでsqlを利用した検索結果表示画面について

phpで検索結果画面の制作を勉強中です。
pdoでmysqlデータベースに接続しています。

検索フォームに入力されたテキストデータを条件に
tableA内をあいまい検索をして
必要項目columnA、columnB、columnCを取得し、
htmlのテーブルの<td></td>に
それぞれ$row['columnA']、$row['columnB']、$row['columnC']を入れ、
while($row = $stmt->fetch(PDO::FETCH_ASSOC)で繰り返すことで
テーブル一行ごとに取得できたデータを1つ記載して結果として表示するプログラムを書き、うまく稼働させることができました。


問題は、今度はtableB内で、tableAで取得したcolumnAとtableBのcolumnDの値が同じという条件のもと、
該当レコードのcolumnE、columnFを取得して、
検索結果のテーブルに、tableAの取得データと同じ行で
データを表示させたいという点です。

単純に、上記のうまく稼動したテーブル内の
<td></td>内に
$stmtb=$db->prepare('SELECT columnE,columnF FROM tableB WHERE columnD :columnA');
$stmtb->bindValue(':columnA',$row['columnA'],PDO::PARAM_STR);
$stmtb->execute();
$row_b = $stmtb->fetch(PDO::FETCH_ASSOC);
print htmlspecialchars($row_b['columnD']);
というプログラムを記述しましたが、
テーブル上にデータが表示されませんでした。

どのようにしたら同一テーブル行内で別テーブルの該当データを表示することができるのでしょうか?

イメージが伝わりづらいかと思いますので以下、テーブルとカラムに名称を付けて、
表示したいテーブルのイメージとデータベーステーブルのイメージの画像を添付します。
添付画像の
顧客No.・顧客名・住所のデータが顧客情報用のテーブルに格納されていて
顧客No.・購入品・購入日のデータが購入品ログ用のテーブルに格納されている
状態で、
顧客No.と照合した購入品ログ用テーブル内の購入品のデータと購入日のデータを
添付画像のように、同じテーブルの行で表示をさせたいです。

ご回答、よろしくお願いします。

phpで検索結果画面の制作を勉強中です。
pdoでmysqlデータベースに接続しています。

検索フォームに入力されたテキストデータを条件に
tableA内をあいまい検索をして
必要項目columnA、columnB、columnCを取得し、
htmlのテーブルの<td></td>に
それぞれ$row['columnA']、$row['columnB']、$row['columnC']を入れ、
while($row = $stmt->fetch(PDO::FETCH_ASSOC)で繰り返すことで
テーブル一行ごとに取得できたデータを1つ記載して結果として表示するプログラムを書き、うまく稼働させることができました。


問...続きを読む

Aベストアンサー

いまいちきちんと理解していませんが、
単純にテーブルAのカラムAにテーブルBのカラムDをリレーションして表示するだけでは?

SELECT * FROM テーブルA
INNER JOIN テーブルB ON カラムA=カラムD

的な?

Q検索履歴削除方法

Yahoo!ホームページでの検索履歴削除は
「ツール」→「インターネットオプション」→「コンテンツ(タブ)」→「オートコンプリート」で履歴削除できましたが、IEに接続した際にアドレスを入力する部分の下の検索ボタンから検索した場合の履歴の削除はどうやるのでしょうか。
説明が分かりづらいと思いますが、ご教示願います。

Aベストアンサー

★履歴の削除はレジストリで行えます。
・毎回、パソコン起動時に履歴を削除したいのならばフリーソフトの『窓の手』で
 行えます。→http://www.asahi-net.or.jp/~vr4m-ikw/
・また、『インターネット・オプション』の『オートコンプリート』で『Webアドレス』
 のチェックを外せば履歴は残りません。
・それでは、レジストリでの履歴削除方法を紹介します。

操作:
・まず、すべての『インターネット・エクスプローラ』を終了して下さい。
・『Windows』+『R』キーを押して、『regedit』と入力してレジストリ・エディタを
 起動して下さい。→やたらに削除などの操作をしなければレジストリ操作は安全!
・HKEY_CURRENT_USER
 └Software
  └Microsoft
   └Internet Explorer
    └TypedURLs を開く⇒インターネット・エクスプローラの『アドレス・バー』履歴
・右画面で『url1』~『url??』の名前がありますよね。数字の連番です。
・上記の名前を全て削除すれば履歴をクリアできます。
・削除するときは、『url1』~『url??』をシフトキーを押しながら選択して右メニュー
 から削除します。
・削除したら、レジストリ・エディタを終了します。
・以上。おわり。→安全性を求めるのなら、または自動化したい場合は『窓の手』を
 ダウンロードしてインストールしましょう。便利です。私も使っています。

参考URL:http://www.asahi-net.or.jp/~vr4m-ikw/

★履歴の削除はレジストリで行えます。
・毎回、パソコン起動時に履歴を削除したいのならばフリーソフトの『窓の手』で
 行えます。→http://www.asahi-net.or.jp/~vr4m-ikw/
・また、『インターネット・オプション』の『オートコンプリート』で『Webアドレス』
 のチェックを外せば履歴は残りません。
・それでは、レジストリでの履歴削除方法を紹介します。

操作:
・まず、すべての『インターネット・エクスプローラ』を終了して下さい。
・『Windows』+『R』キーを押して、『regedit』と入力してレ...続きを読む

QPHPで大手の検索エンジンの検索結果をDB化できますか

業務上、かなりの業種のリンク集を作る必要があります。
例えば、「社会福祉」という文字列があるサイトのURLを
取り敢えずEXCEL、テキスト等に書き込む、というような処理です。

独自の検索エンジンを作成するのは無理だと考えています。
結局、大手の取得結果を利用させてもらう事になると思います。

例えば、Googleに「社会福祉」という検索文字列を自動的に与え、サイトのURLとタイトルを
テキストに書き込む、といった処理です。
*「検索文字列を自動的に与え」というのは、社会福祉、福祉作業場、社会復帰・・・など
検索文字列テーブルを用意して上から順番にGoogle検索をかける、というイメージで書いています。

もしできるのであれば、本格的にPHPの勉強を始めようと思います。
私は今までVB専門で、上記のような事がわかりません。

また、上記のサンプルのようなものがあるサイト、書籍などありましたら教えてください。
ご存知の方、よろしくお願いします。

Aベストアンサー

Client URL Library 関数を使用すれば可能ですがGoogleの検索結果のリストは「データベースの著作物」にあたるとおもわれます。その点では Google API を使用するのが安全だとおもいますが。

CURL, Client URL Library 関数
http://www.php.net/manual/ja/ref.curl.php

著作権法第十二条の二
データベースでその情報の選択又は体系的な構成によつて創作性を有するものは、著作物として保護する。

参考URL:http://www.php.net/manual/ja/ref.curl.php

QMSNホームページのウェブ検索履歴削除方法がわからない

MSNホームページのウェブ検索の履歴削除方法が分かりません。MSNサーチの履歴の削除はウィンドウの左のMANロゴをクリックして履歴の削除ができるのは理解していますが,MSNホームのウェブ検索の履歴削除がどうしてもできません。どなたか教えてください。

Aベストアンサー

ツール

インターネットオプション

コンテンツ

オートコンプリート

フォームのクリア

これで消えます。すべてのフォームに記入している情報が削除されます。
googleとか掲示板での名前とかがそれにあたります。
なんかやばそうに聞こえますがそんなことはありません。

Q【PHP】文字をPOSTで飛ばすと「'」「"」「\」に「\」がつく

<form>で文字列を送信して「$_POST」で受信する場合、
「'」「"」「\」の前にのみ自動で「\」がついてしまいます。
(「'」「"」「\」→「\'」「\"」「\\」)
これはなぜでしょうか?
できれば\を付けないようにしたいのですが…

お詳しい方、よろしくお願いいたします。

<環境>
EUC-JP
PHP4.4.4
<プログラム>
<?php
header('Content-Type: text/html; charset=EUC-JP');
header('Content-Language: ja');
mb_internal_encoding("EUC-JP");
$step = $_GET["step"];
$tx = $_POST["tx"];
if($step==''){ // ---- 初期画面
print "<form action='hoge.php?step=end' method='POST'>";
print "<input type='text' name='tx'>";
print "<input type='submit' value='ENTER'>";
print "</form>\n";
}
if($step=='end'){ // ---- 受信画面
print "{$tx}";
}
?>

<form>で文字列を送信して「$_POST」で受信する場合、
「'」「"」「\」の前にのみ自動で「\」がついてしまいます。
(「'」「"」「\」→「\'」「\"」「\\」)
これはなぜでしょうか?
できれば\を付けないようにしたいのですが…

お詳しい方、よろしくお願いいたします。

<環境>
EUC-JP
PHP4.4.4
<プログラム>
<?php
header('Content-Type: text/html; charset=EUC-JP');
header('Content-Language: ja');
mb_internal_encoding("EUC-JP");
$step = $_GET["step"];
$tx = $_POST["tx"];
if(...続きを読む

Aベストアンサー

マジッククォート機能により、一部記号類がエスケープ処理されているためです。stripslashesで戻してください。

$step = stripslashes($_GET["step"]);


人気Q&Aランキング

おすすめ情報