[pgsql-jp: 27203] Re: pg_execが2 度実行されてしまう現象

Naofumi Kondoh nkon @ shonan.ne.jp
2002年 8月 29日 (木) 19:36:13 JST


ソフト工房の近藤です。

本題と直接関係ない話ですが。

chico wrote:
> チコと申します。

....略....

> PHPスクリプトでは、以下のような処理の流れです。
> (呼出し側のFORMからnameはPOSTされるという設定です)
> (エラー処理は省いて書きました)
> 
>   $name = $_POST['name'];
>   $con = pg_connect("host=xxx port=5432 dbname=xxx user=xxx password=xxx");
>   $sql = "insert into foo(name) values('$name')"
>   $rtn = pg_exec($con, $sql); --------------------- (1)
....略....

上記処理で、name の入力欄に次のように入力されると、
2件 INSERT されてしまいます。(magic quote OFF の時)。
# DELETE FROM foo; だともっと恐ろしいことに。。。

近藤 ' ); INSERT INTO foo(name) VALUES ('山田

省略されたエラー処理に、入力チェックや addslashes
関数等々があるのだと思いますが、ご参考までに。

----------------

本題の方ですが、SUBMIT 2度押しや、戻る・RELOAD
などのブラウザ操作でも2重挿入が発生します。

これらの防止策はいろいろあると思いますが、私は、
HTML 送出毎に連番を付けて識別するようにしています。
セッションID+HTML頁ごとの連番が同一ならば、
SUBMIT 2度押しと判定してエラーにしています。

2度押し・RELOAD対策をして、再度テストされてみ
ては如何でしょうか?。

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 (株)ソフト工房   近藤直文        Email:  nkon @ shonan.ne.jp
http://www.SOFTKOUBOU.co.jp/      http://www.shonan.ne.jp/~nkon/
2002-09-26(木)19:00-21:30 第6回 JPUG 業務アプリ分科会 勉強会
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/





pgsql-jp メーリングリストの案内