ユーザーが連絡先ページに入力した場合に、Web ページにタイマーを設定したいと考えています。彼は次の 30 日間、電子メールを再送信したり、管理者の連絡先ページに入力したりすることができませんでした。
その後、彼はお問い合わせページに記入することができました。
電子メールはこれに対して一意である可能性があります。電子メールの検証を通じて、その特定のユーザーを今後 30 日間保持することができます。
私を助けてください。
ユーザーが連絡先ページに入力した場合に、Web ページにタイマーを設定したいと考えています。彼は次の 30 日間、電子メールを再送信したり、管理者の連絡先ページに入力したりすることができませんでした。
その後、彼はお問い合わせページに記入することができました。
電子メールはこれに対して一意である可能性があります。電子メールの検証を通じて、その特定のユーザーを今後 30 日間保持することができます。
私を助けてください。
次のようなデータベース テーブルを作成できます。
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
変数が返された場合は、フォームをロードすることさえできません。