あきら×ひろこ=ゆう

あきら・ひろこ・ゆうの家族航海日誌。

123456789101112131415161718192021222324252627282930

2007年09月02日(日)

PHPのリロード対策を誤っていました! [あきら]

ブラウザーの更新・移動ボタンをクリックすると、フォームデータの再送信をするか確認が表示される場合がある。

原因は、POSTメソッドでパラメータが送信されているため、ページの表示にパラメータが必要とブラウザーが判断するためだ。

PHPでこれを表示させないためには、パラメータをセッション変数に保存し、Location ヘッダーに自分自身を指定して送信するのが一般的だ。

少し前は、以下の様に実装していた。

if ( isset( $_POST[ 'command' ] ) ) {
    パラメータの処理
    ...

    header( 'Location: ' . $_SERVER[ 'PHP_SELF' ] ) ;
    exit ;
}

しかし、これだと以下のようなフォームでページが呼び出された場合にうまく行かない。

<form method="POST" action="reload.php">
  <input type="submit" value="戻る" />
</form>

上記実装では command パラメータが与えられる事を前提としているのに、パラメータは何も渡って来ない。

正しい実装は以下の様にするべきだ。

if ( $_SERVER[ 'REQUEST_METHOD' ] == 'POST' ) {
    パラメータの処理
    ...

    header( 'Location: ' . $_SERVER[ 'PHP_SELF' ] ) ;
    exit ;
}

さらにHTMLではJavaScriptで送信ボタンを無効化しておくとよい。

<script type="text/javascript"><!--

var submitted = false ;

function form_submit()
{
    if ( submitted ) return false ;

    submitted = true ;

    return true ;
}

// -->
</script>

...

<form name="form_send" onsubmit="return form_submit();">
...
</form>

Posted by あきら at 19時50分   トラックバック ( 0 )   コメント ( 0 )

トラックバック

トラックバックURL

http://akira.matrix.jp/tb.php?ID=143

コメント

コメント投稿フォーム

名前:(この情報をCookieに保存させたい場合にチェック)
メールアドレス: (表示はされません)
URL: (名前にリンクされて利用されます)
コメント:
パスワード: (削除時に利用)

ページのトップへ ページのトップへ

広告

Expert技術情報
HTML文書・サンプルプログラム付き

FCKeditorファイルブラウザー制覇
設定が難しいとご相談を受けることが多いファイルブラウザーについて解説。
¥2,500 

FCKeditorプラグインマスター
FCKeditorの内部まで調査した上で、プラグインを作成する方法を解説。
¥2,500

FCKeditorエキスパート 第3版
FCKeditorの導入から設定までを解説。
¥3,500 

プロフィール

あきら

LAMP/LAPP中心に開発をしているSE兼PG。
最近はFCKeditorのプラグイン開発。
ふたご座・AB型。神経質。
<連絡先> akira@behappy.2-d.jp

検索


カテゴリーリスト

最近の記事

最近のコメント

最近のトラックバック

リンク集

RSS1.0

[Login]


powered by a-blog
Copyright (C) 2008 あきら×ひろこ=ゆう All rights reserved.