[PHP-users 18347]Re: フォームからの重複投稿

nakajima @ nnd.jp nakajima @ nnd.jp
2003年 10月 8日 (水) 16:07:01 JST


KAZさん


なかじまです。

KAZさんの要件と僕のシステムの要件が一致しているかどうかわかりませんが
一致していると仮定してご説明します。

目的の(掲示板書き込み等)の処理(スクリプト)が終わったあとに、

header("Location: http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}");

の一文をいれ、(上記の例では)現在のページにリダイレクトします。
するとクライアントは新規ページとして上記ページを認識しますのでフォームの
データはクリアされます。

ですのでブラウザの更新ボタンを押したとしてもただページがリロードされるだ
けでフォームデータは再送信されません。 したがって重複書き込みを回避でき
るというしくみです。

ちなみに目的の処理のスクリプトが実際のh場tmlドキュメントの<head>タグ以前に
ある場合は問題ないのですが、そうでない合(恐らく多くの場合)は「おいお
い、もうヘッダは送ったでしょ」というエラーがでちゃいます。

ですのでドキュメントの構成を変更するか、ob_start()関数を使って出力をバッ
ファリングしてしまえばエラーを回避できます。 恐らく後者の方が現実的だと
思います。


PHP-users メーリングリストの案内