ページAにコンボボックス(テーブルからデータ取得)を配置し、
同ページの「ダウンロード」ボタンで、エクセル出力(既に用意されたテンプレートExcelに値をセットするだけ)を行うという処理を作っています。簡易化すると以下のような感じです。
ページA.php
//postされたとき
if($SERVER[REQUEST_METHOD]=="POST"){
//値受け取り
//エクセルファイルOPEN,値セット,名前を付けて保存,閉じる処理
//ダウンロードダイアログ表示
}
//html部
<form action="" method="post">
//値リストにDBより取得した値表示
</form>
一度ダウンロードダイアログでエクセルファイルを「保存」や「開く」後、
再度「ダウンロード」ボタンを押したり、リロードを行ったりした場合に
何も表示されなくなってしまいます。(必要なパラメータもhiddenで渡し、常に変数に保持するようにしています。)
みなさんはダウンロードダイアログ後の後始末をどのようにされていますか?
ダウンロードダイアログというのはブラウザの機能であってPHPは関係ないように思います。
「フォームの2重送信防止をCookieで行うサンプル」を参考に、二重ダウンロードしないようにしてはいかがでしょう。
PHPでダウンロードするファイルを送信する場合は
ダウンロードボタンを押されたら新しいウインドウを開いてダウンロードするように
してください。
ご回答ありがとうございます。
いろいろ試してまして、
「完了しました。5秒後にトップページへ移動します。」とベタ書きした
ページB(新しいページ)をPOST先として、ページBにダイアログ表示処理
「header('Content-・・・
:
readfile($filepath);」
を記述しても、ページAの「ダウンロード」ボタンでページBが表示されず、
ページAのままダイアログが表示されます。
ダウンロードファイルを「保存」なり「開く」なりした後、
ページAをアクティブにし、ブラウザの「戻る」ボタンなどを
押したタイミングでページBが表示されてしまいます。
確かにページBで一番始めに読み込まれるのは「header(・・・」の
部分で、html記述が読み込まれる前に
ダウンロードダイアログへハンドル(?)が渡るので
表示更新がされないのも何となくわかるのですが
ここをどのように解決していいのかがわかりません。
引き続きアドバイスをお願いします。
ご回答ありがとうございます。
いろいろ試してまして、
「完了しました。5秒後にトップページへ移動します。」とベタ書きした
ページB(新しいページ)をPOST先として、ページBにダイアログ表示処理
「header('Content-・・・
:
readfile($filepath);」
を記述しても、ページAの「ダウンロード」ボタンでページBが表示されず、
ページAのままダイアログが表示されます。
ダウンロードファイルを「保存」なり「開く」なりした後、
ページAをアクティブにし、ブラウザの「戻る」ボタンなどを
押したタイミングでページBが表示されてしまいます。
確かにページBで一番始めに読み込まれるのは「header(・・・」の
部分で、html記述が読み込まれる前に
ダウンロードダイアログへハンドル(?)が渡るので
表示更新がされないのも何となくわかるのですが
ここをどのように解決していいのかがわかりません。
引き続きアドバイスをお願いします。