[PHP-users 8073] Re: $_POST変数を初期化するには

しょうなり [ml] php-users@php.gr.jp
Sun, 16 Jun 2002 15:18:22 +0900


しょうなりです。

ishihara さんは書きました:
>こんにちは。
>石原と申します。
>
>【質問】
>$_POST["xxx"]グローバル変数(連想配列)を初期化することはできるのでしょうか
>>
>要するに、同じページにPOSTしてデータをDBに登録はしたいのですが、
>$_POST["xxx"]グローバル変数(連想配列)のデータがそのまま残ってしまう
>(キャッシュ?)。
>その影響か、一度正常に登録後、ブラウザの更新ボタンをクリックすると、
>isset($_POST["xxx"])にて、テキストボックスに入力されているか判別しているが、
>初期化されていない$_POST["xxx"]グローバル変数(連想配列)のデータの為、入力
>されていると判断され、DBに登録されてしまうんです。
>そこで、正常にデータ登録後、$_POST["xxx"]を初期化またはクリアできれば、更新
>されても、データ登録はされないだろうと考えたわけですが・・・

POSTデータをキャッシュしているのは PHP ではなく、
お使いのブラウザのほうです。
PHPに限らず、Perl等でも同じ動作をします。

例えば MacOSX のIE5.1などは POSTデータをキャッシュしませんので、
リロードしても再投稿にはなりません。
(それで動作チェック時にはまた1からデータを作らなくてはいけなくて、
 めんどくさかったりしますが)


僕の場合は switch case文で登録と表示を切り分けて、
面倒でも header() で再表示させています。

switch ($_POST["action"]) {
 case "regist" :
  include("regist.inc");
  header("Location: http://domain/script.php?action=39mes");
  break;

 case "39mes" :
  include("39mes.ihtml");
  break;
}

という感じです。
ご参考までに…。

-- 
しょうなり@信州 肥田昌也
Email:     shounari@webappli.jp
HomePage:  http://www.webappli.jp/
	=> JSlayout プレビュー版(見〜る〜だ〜け〜)