HTML フォームを送信する場合、フォームが正常に送信され、応答ページが表示されるまでに数秒かかる場合があります。アイドル状態になって送信ボタンを何度もクリックしてしまうと、フォームの送信が重複してしまう可能性があります。通常は実際には問題になりませんが、場合によっては、この問題が発生するのを防ぎたい場合があります。
以下に、重複送信を防ぐための 2 つの簡単なヒントを示します。これらを使用することも、両方を組み合わせて使用することもできます。
»JavaScript を使用した複数のフォーム送信を防止する
Javascript ブロックを使用して送信を繰り返すのが、おそらく最も簡単な方法です。誰かがフォームを送信するときは、単純に送信ボタンを無効にし、その値を「送信してください。お待ちください...」のようなよりわかりやすいものに変更することもあります
たとえば、このボタンをクリックしてみてください。このページをリロードするまで無効のままになります:
最初のステップは、送信ボタンに一意の ID (例: id="myButton":
) を与えることです。
2 番目 (最後の) ステップは、2 つの Javascript コマンドに
/* 電子メール受信者を設定します */
$myemail = "you@domain.com";
/* check_input 関数を使用してすべてのフォーム入力をチェックします */
$yourname = check_input($_POST['yourname'], "あなたの名前を入力してください");
$subject = check_input($_POST['subject'], "件名を書く");
$email = check_input($_POST['email']);
$website = check_input($_POST['website']);
$likeit = check_input($_POST['likeit']);
$how_find = check_input($_POST['how']);
$comments = check_input($_POST['comments'], "コメントを書いてください");
//www.software8.co 原文
/* 電子メールが無効な場合は、エラー メッセージを表示 */
if (!preg_match("/([w-]+@[w-]+.[w-]+)/", $email))
{
Show_error("電子メール アドレスが無効です");
}
/* URL が無効な場合は、$website を空に設定します */
if (!preg_match("/^(https?://+[w-]+.[w-]+)/i", $website))
{
$website = '';
}
/* メールのメッセージを準備しましょう */
$message = "こんにちは!
あなたのお問い合わせフォームは以下によって送信されました:
名前: $あなたの名前
メールアドレス: $email
URL: $website
$likeit が好きですか?
$how_find
どうやって見つけたのですか?
$コメント
";
mail($myemail, $subject, $message);
setcookie('FormSubmitted', '1');
header('場所: thanks.htm');
exit();
/* 使用した関数 */
関数 check_input($data, $problem='')
{
$data = トリム($data);
$data = ストリップスラッシュ($data);
$data = htmlspecialchars($data);
If ($problem && strlen($data) == 0)
{
show_error($problem);
}
$data を返します;
}
関数 show_error($myError)
{
?>
次のエラーを修正してください: