[PHP-users 33057] Re: 「 enter 」キーの連打について

kanonbell kanonbell.sky @ gmail.com
2007年 12月 19日 (水) 00:36:03 JST


こんばんは

> Enterキーの二度打ちですが、私もこの部分でかなり悩んだことがあります。
> この部分についてはサーバーの部分で制御するのではなく、クライアント
> スクリプトでの制御でので解決することができました。

クライアント側での対応もあったほうがいいと思いますが、普通はサーバ側で
対応するものじゃないでしょうか。

二重登録を防止したい場合、よくやるやり方はトランザクションを使い、すでに
同じデータが存在しないかチェックするやり方でしょうか。
必ず更新されるカラムにUNIQUE制約をつけておき、DBからこのエラーが返って
きたら二重送信とみなすっていうちょっと乱暴な気もする方法もあるかな。

UPDATEやDELETEの場合は、あらかじめ更新時刻のカラムを保持しておき、
入力フォームにこの時刻をhiddenパラメータなどで埋め込んでおいて渡し、
UPDATEやDELETEのWHERE句に利用する手もあります。

CRSF対策とやることが似てるので、両方いっぺんにやっちゃった方がいいかも。

クライアントからの入力は信用してはいけないので、クライアント側の対策のみで
解決って言っちゃうのはまずいと思います。


掲題のDBエラーはそもそも二重送信した際にエラーが出ること自体が問題な
気もする(UNIQUE制約のせいなら別ですが)ので、二重送信を抑制する前に
エラーの原因を調べた方がよいとおもいますけれども。


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