PHPダウンロードダイアログ後の処理について


ページAにコンボボックス(テーブルからデータ取得)を配置し、
同ページの「ダウンロード」ボタンで、エクセル出力(既に用意されたテンプレートExcelに値をセットするだけ)を行うという処理を作っています。簡易化すると以下のような感じです。

ページA.php
//postされたとき
if($SERVER[REQUEST_METHOD]=="POST"){
//値受け取り
//エクセルファイルOPEN,値セット,名前を付けて保存,閉じる処理
//ダウンロードダイアログ表示
}
//html部
<form action="" method="post">
//値リストにDBより取得した値表示
</form>

一度ダウンロードダイアログでエクセルファイルを「保存」や「開く」後、
再度「ダウンロード」ボタンを押したり、リロードを行ったりした場合に
何も表示されなくなってしまいます。(必要なパラメータもhiddenで渡し、常に変数に保持するようにしています。)

みなさんはダウンロードダイアログ後の後始末をどのようにされていますか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/04/14 17:00:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:taroe No.2

回答回数1099ベストアンサー獲得回数132

ポイント35pt

PHPでダウンロードするファイルを送信する場合は

ダウンロードボタンを押されたら新しいウインドウを開いてダウンロードするように

してください。

http://d.hatena.ne.jp/litt/20070905/p1

id:EEFAE4

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

いろいろ試してまして、

「完了しました。5秒後にトップページへ移動します。」とベタ書きした

ページB(新しいページ)をPOST先として、ページBにダイアログ表示処理

「header('Content-・・・

 :

 readfile($filepath);」

を記述しても、ページAの「ダウンロード」ボタンでページBが表示されず、

ページAのままダイアログが表示されます。

ダウンロードファイルを「保存」なり「開く」なりした後、

ページAをアクティブにし、ブラウザの「戻る」ボタンなどを

押したタイミングでページBが表示されてしまいます。

確かにページBで一番始めに読み込まれるのは「header(・・・」の

部分で、html記述が読み込まれる前に

ダウンロードダイアログへハンドル(?)が渡るので

表示更新がされないのも何となくわかるのですが

ここをどのように解決していいのかがわかりません。

引き続きアドバイスをお願いします。

2011/04/08 10:11:35

その他の回答1件)

id:asuka645 No.1

回答回数856ベストアンサー獲得回数97

ポイント35pt

ダウンロードダイアログというのはブラウザの機能であってPHPは関係ないように思います。


フォームの2重送信防止をCookieで行うサンプル」を参考に、二重ダウンロードしないようにしてはいかがでしょう。

id:taroe No.2

回答回数1099ベストアンサー獲得回数132ここでベストアンサー

ポイント35pt

PHPでダウンロードするファイルを送信する場合は

ダウンロードボタンを押されたら新しいウインドウを開いてダウンロードするように

してください。

http://d.hatena.ne.jp/litt/20070905/p1

id:EEFAE4

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

いろいろ試してまして、

「完了しました。5秒後にトップページへ移動します。」とベタ書きした

ページB(新しいページ)をPOST先として、ページBにダイアログ表示処理

「header('Content-・・・

 :

 readfile($filepath);」

を記述しても、ページAの「ダウンロード」ボタンでページBが表示されず、

ページAのままダイアログが表示されます。

ダウンロードファイルを「保存」なり「開く」なりした後、

ページAをアクティブにし、ブラウザの「戻る」ボタンなどを

押したタイミングでページBが表示されてしまいます。

確かにページBで一番始めに読み込まれるのは「header(・・・」の

部分で、html記述が読み込まれる前に

ダウンロードダイアログへハンドル(?)が渡るので

表示更新がされないのも何となくわかるのですが

ここをどのように解決していいのかがわかりません。

引き続きアドバイスをお願いします。

2011/04/08 10:11:35

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません