人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

フォームで重複登録させない方法は?

htmlのフォームで送信ボタンを押して、データを登録するようなページでの重複登録防止方法を教えてください。

JSで送信をクリックした瞬間にボタンを消して、押せなくするようなことも以前試しましたが、
tabでフォーカスをあわせて、Enterボタンを押しっぱなしにしたりすると、複数回ポストされます。

できれば、フォームを開いたときなどにキーのやり取りをして、登録時にチェックするような方法はとらずに、楽に実装できる方法が希望です。

また、登録後の遷移した画面から、ブラウザの戻るボタンで戻って、再度登録したりすることもあわせて防ぎたいと思います。

●質問者: dingding
●カテゴリ:インターネット ウェブ制作
✍キーワード:HTML js はと キー クリック
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● koujirou
●23ポイント

書き込み時にUA(User Agent)を取得し一時的に記憶します。

その際に指定の時間(10秒など)差がないと書き込めなくしているところが多いですね。

◎質問者からの返答

詳しく分けると、

・UAで、IP、ブラウザなどすべての値をシリアライズ

・登録するデータ+UAシリアライズ+登録時間を登録

・登録するときにUAシリアライズが同じで、登録時間が今より指定時間以内のものがないかチェックする

ということでいいでしょうか?

ちなみにこの場合、同じ企業や、同じ携帯会社からのアクセスの場合、実際は同じ人でなくてもはじいてしまうことはないのでしょうか?

登録する内容も含めてシリアライズしたりして、違う人をはじいてしまう確率を下げるなどの方法でいいでしょうか?


2 ● tsux88
●23ポイント

フォームでonsubmit=を使うと送信時に必ずJavaScriptが呼ばれ(送信ボタンを押す、テキストフィールドでEnterを押すに関わらず)、ここでreturn false;とすれば送信をキャンセルできます。なのでここでチェックしてみてはいかがでしょうか。

http://www.openspc2.org/JavaScript/ref/event/onSubmit.htm

◎質問者からの返答

すみませんが、もう少し詳しく教えてください。

また、この方法は、ブラウザの戻るボタンの対応も可能でしょうか?


3 ● Marine-Blue
●22ポイント

ボタンを消すっつってdisplay=noneとかかましてるように見えますが気のせい?これだと見た目上は消えますがソース上はボタンが存在する状態なので消したことにはなりません。

フォームにdisabledかましてコントロールを無効化したりlocation.replaceで戻れなくする手法でどうにかなるんじゃないかと思うんですけどダメなんでしょうか。

◎質問者からの返答

すみませんが、location.replaceで戻れなくする手法というのをもう少し詳しく教えてください。


4 ● いわわ
●22ポイント

最初の1回だけSUBMITできるようにするサンプルです。

<script>
var done=0;
</script>
<FORM ACTION="hoge.cgi" ONSUBMIT="return !done++;" TARGET=_blank>
<INPUT NAME=a>
<INPUT TYPE=SUBMIT>
</FORM>

doneという変数を使って、ONSUBMITで最初の1回目はtrueを、2回目からはfalseを返します。

falseが返るとSUBMITしなくなるので、これでいけると思います。


IE6で動作確認しました。とりあえず適当ですのでこれはヒント程度に改造とかしてください。

◎質問者からの返答

ありがとうございます

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ