PerlでCGI(フォームに入力したデータをCSVに貯めています)を作っているのですが、送信フォームを2,3回クリックする人がいるので同じデータが入ってきてしまうので、制限をかけたいのです。
一定時間内に同じデータが入ってきたら1回しか有効化しないという制限を入れれば良いのでしょうが、記述の仕方がわかりません。

どなたかお知恵をお貸しください。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

JavaScriptがオフの時の安全策、ということでしょうか?



# フォームページをCGIで出力する、という仮定ですが・・・

短時間に大量にアクセスされたりしないのなら、フォームページに hidden を設けて、これにフォームページ表示時の時間(timeの値)を埋め込んでみてはどうでしょうか。
で、CSVにもそのデータを入れておき、データを入れる際に同じ時刻のものがないかチェックする、という感じです。
CSVには時刻順になるようにデータを入れると、チェックも楽&軽くなります。

もし偶然の同時アクセスや、大量アクセスを心配するなら、時刻以外に $ENV{REMOTE_PORT} を入れてやると良いです。
この値は、クライアントごとにユニークになる(はず)ので、少なくとも時刻とダブルでチェックすれば、二重送信のチェックと、別クライアントからの同時送信をチェックできます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
CSVには、登録された時間もとっているので同じ時間がないのかチェックをしてあったらエラーを出すという命令をいれるのですね?

少し勉強が必要なようです。

ありがとうございました。

お礼日時:2001/12/13 15:09

>「文章の重複チェック」


文字列が、以前のデータと全く同じであれば、はじいてしまう方法です。

文字列が長いと、単純に全文比較をすると時間が掛かかったりしますので、検出方法を工夫しないと辛いかも...。
(例えば、文字列データのサムを作るとか...。)
    • good
    • 0
この回答へのお礼

ありがとうございます。
文字列の比較的短いところでチェックを取ってみます。

お礼日時:2001/12/19 17:23

Javascript のカテゴリーでも質問をしているようですが、そちらの方で行う方が


安直にいけると思います。

CGI は、一回の要求毎にプロセスが起こされますから、基本的に「前回」を知ることが
難しいです。

Perl でやろうとするならば、Cookie に情報を残して、それをチェックするという
ような感じになります。

ただ、何も考えないで実装してしまうと、一度に2~3回押したときと、次の2回目が
う~んと後(例えば、次の日)の区別がつかなくなりますので、実装には注意が必要です。

この回答への補足

ありがとうございます。

CSVでデータを貯めているのでそこに毎回見に行って同じなものがあったらエラーを出すと言う方法をとるということをしなければいけないと考えています。

JSの方で一度試してみます。
ありがとうございました。

補足日時:2001/12/13 15:04
    • good
    • 0

少し手間かも知れませんが、ここのサイトで使われてる「文章の重複チェック」を行って見られては如何ですか?



或いは、送信ボタン押下直後に一旦画面を送ってしまう方法も有りますが、
文章等の入力がある場合は、送信失敗の時にうっとしいと思いますね。
    • good
    • 0
この回答へのお礼

お答えありがとうございます。
ここのサイトで使われてる「文章の重複チェック」というのはドコのことでしょうか?

手間はいといませんので、教えていただければ幸いです。

お礼日時:2001/12/13 15:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング

おすすめ情報