[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 メーリングリストの案内