1

Webページの投票機能と一緒に表示されるのは、訪問者(投票者)が投票に参加したことに対する報酬として、抽選で詳細を入力できるようにする次の入力フィールドです。

ラッフルエントリーフォームスクリプトは、投票スクリプトに添付されていません。ラッフルエントリーフォームスクリプトのすべての入力が検証され、情報がフラットファイルに送信されます。これは、小さな町のフォーラムで時々発生する可能性のあるさまざまなトピックについて、わずか7日間続く短い投票です。(IPも収集されます)

Name  :<input type="text" name="visitor" /><br /><br />
Email :<input type="text" name="visitormail" /><br /><br />
Phone :<input type="text" name="visitorphone"/><br /><br />

提出時に、「ありがとう」ページは、訪問者に、彼らの詳細が障害物の抽選で一度使用されることを通知します。言い換えると、訪問者は戻ってフォームに再度入力して送信することができます。そのため、障害物の乱数の描画を完了する前に、フラットファイルから複数のエントリを確認して削除する必要があります。

質問訪問者が抽選に複数のエントリーを試みるのを防ぐ何かをインストールする簡単な方法はありますか?

4

7 に答える 7

1

IPもログに記録します($_SERVER変数を参照)。次に、IPで重複を絞り込むことができます。常に最も確実な方法とは限りません。

別のアプローチはクッキーである可能性があります。

于 2011-11-11T20:20:56.300 に答える
1

私は@DavidBarkerに同意します。ログインしてユーザーIDを持っていない限り、ユーザーはおそらくあなたが配置したものを回避する方法を見つけるでしょう。しかし、私は答えが「はい」であるという彼に同意しません。答えは「いいえ」だと思います。

訪問者が複数のエントリでわずかに異なる情報を送信するのを防ぐ方法がわかりません。あなたが彼らの社会保障、パスポートまたは運転免許証番号を求めて確認しない限り。実際、ユーザーがログインするシステムで複数のアカウントを回避する場合も、おそらく同じことが言えます。

したがって、人々が抽選に複数のエントリーを持っているか、それをあきらめる可能性があることを受け入れる必要があるかもしれません。

否定的な答えで申し訳ありませんが、私はあなたが自由に使える莫大なリソースなしであなたが望むものをどのように達成できるかを本当に見ることができません。

私の議論をさらに説明するために編集してください:

1-名前をフィルターとして使用

私は「ポールホワイト」という単純な名前を持っています。数百万とまではいかなくても数千のポールホワイトがいるので、1つに制限するのは現実的ではありません。

2-IPアドレスを使用する

私がしなければならないのは、ルーターをISPから切断してから、再接続することだけです。こんにちは、新しいIP、ラッフルへの2回目のエントリー。または、私の古い母親のコンピュータにログインします-同じ結果です。複数のエントリ、期間を防ぐことはできません。

3-電話番号を使用する

また、固定電話番号とスカイプ番号(旅行が多い)の携帯電話を2台持っているので、毎回違うものを使うことができます。

4-家番号と郵便番号を使用する

英国では(他の場所についてはわかりませんが、似ていると思います)、1つの郵便番号が多くの家に適用されます。ただし、私の家番号が16であるとすると、16、16a、16bとしてエントリを送信できます。アドレスは引き続き有効であり、そこにメールで送信されたものはすべて私に届きます。

5-あなたが考えることができる他のもののためのマイナーな操作に関連する同様の議論

于 2011-11-11T20:38:21.477 に答える
0

データをデータベースに保存していると思います。次に、一意である必要がある1つのアイテムを選択し(電話番号をお勧めします)、その列を一意のキーにすることができます。したがって、データベースへの複数の挿入は失敗します(電話番号の形式を事前に確認し、実際に挿入する前に標準化する必要がありますが、これはまったく別の問題です)。

于 2011-11-11T20:19:38.397 に答える
0

ユーザーが投票するためにログインする必要がある場合は、user_idを保存して、ユーザーがすでに投票しているかどうかを確認できます。または、匿名の場合は、IP番号チェックを行うことができます$_SERVER['REMOTE_ADDR ']。または、送信時にCookieを保存することもできます。

于 2011-11-11T20:21:33.490 に答える
0

答えはイエスですが、あなたはあなたが与えられたデータで人々をそれほど抑えることができるだけです。人々は(傾いている場合)自分自身を何度も競争に参加させる方法を見つけるでしょう。

フラットファイルから読み取り、キー入力データがすでにファイルに保持されているデータと一致する場合にtrueを返すスクリプトがあります。

例えば

$input = $_REQUEST['post_data'];

$fp = fopen("poll.txt","r");

while ($ln = fgetcsv($fp, 1000, "\t") !== FALSE) {
    if ($ln[4] == $input['post_data']) {

        // Set exists to true
        $exists = TRUE;
    }
}

// Check if $exists == TRUE {
//     return false;
// Else {
//     write new data to file.
// }

/tこれは、フラットファイルが「セル」ごとにデリメータ化されていると見なします。また、考慮すべき点は次のとおりです。$ ln [x]、ここでx=ファイルの各行のデータの位置。

于 2011-11-11T20:26:29.370 に答える
0

電子メールをキーとして使用すると、これを簡単に解決できます。データベースを使用している場合は、次のように、電子メールが存在するかどうかを簡単に確認できます。

"SELECT COUNT(visitoremail) FROM users WHERE LOWER(visitoremail) = '" . strtolower($_REQUEST['visitormail']) . "';

結果がゼロより大きい場合、それらをデータベースに追加しません。同様に、カウントがゼロに等しい場合は、新しいデータを使用してINSERTを実行します。

もう1つの方法は、データベースにすべてのエントリを保存することです。次に、"SELECT DISTINCT visitoremail FROM users...」またはすべての電子メールを選択してPHP配列に入れ、を実行しarray_unique(visitoremails)て一意の電子メールを取得します。

于 2011-11-11T20:30:55.713 に答える
-1

onclickイベントで送信ボタンを無効にした場合、訪問者はフォームを再送信するためにページを更新する必要があります。

あなたは次のようなことをすることができます:

var btn = document.getElementById("button-id");
btn.onclick = function() {
    btn.disabled = 'disabled';
}
于 2011-11-11T20:15:13.203 に答える