-4

ユーザーが連絡先ページに入力した場合に、Web ページにタイマーを設定したいと考えています。彼は次の 30 日間、電子メールを再送信したり、管理者の連絡先ページに入力したりすることができませんでした。

その後、彼はお問い合わせページに記入することができました。

電子メールはこれに対して一意である可能性があります。電子メールの検証を通じて、その特定のユーザーを今後 30 日間保持することができます。

私を助けてください。

4

1 に答える 1

6

次のようなデータベース テーブルを作成できます。

CREATE TABLE contact_flood
(
   `email_address` TEXT NOT NULL,
   `time` INT NOT NULL,
)

ユーザーが連絡先フォームを送信すると、次のようなクエリを使用して、ユーザーの電子メール アドレスとフォームがこのテーブルに保存された時刻が保存されます。

"INSERT INTO contact_flood (email_address, time) VALUES ('".$escapedEmailAddress."', '".time()."')"

次に、メールがテーブルにあるかどうかを確認するフォーム送信のチェックを設定できます。

"DELETE FROM contact_flood WHERE time < (".time()." - 2592000)"
"SELECT COUNT(*) as count FROM contact_flood WHERE email_address = '".$escapedEmailAddress

最初のクエリは、テーブル内の 30 日より古いすべてのエントリを削除し、2 番目のクエリは、指定された電子メール アドレスで残りの行を返します。クエリの結果のcount変数がゼロ以外の場合は、電子メールを送信せず、ユーザーに適切なメッセージを伝えます。ゼロの場合は、先に進んでメールを送信してから、前の挿入クエリを実行します。

これを行う代替手段は、30 日に 1 つの IP アドレスにつき 1 つのフォーム送信のみを許可することです。その場合、email_address を ip_address に置き換えるだけで同じことができます。その場合、フォームがロードされる前にチェックを実行することもできます。ゼロ以外のcount変数が返された場合は、フォームをロードすることさえできません。

于 2012-08-23T20:41:57.550 に答える