ホームページ  >  記事  >  バックエンド開発  >  複数の PHP フォーム送信を防止する_PHP チュートリアル

複数の PHP フォーム送信を防止する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:06:48891ブラウズ

HTML フォームを送信する場合、フォームが正常に送信され、応答ページが表示されるまでに数秒かかる場合があります。アイドル状態になって送信ボタンを何度もクリックしてしまうと、フォームの送信が重複してしまう可能性があります。通常は実際には問題になりませんが、場合によっては、この問題が発生するのを防ぎたい場合があります。
以下に、重複送信を防ぐための 2 つの簡単なヒントを示します。これらを使用することも、両方を組み合わせて使用​​することもできます。
»JavaScript を使用した複数のフォーム送信を防止する
Javascript ブロックを使用して送信を繰り返すのが、おそらく最も簡単な方法です。誰かがフォームを送信するときは、単純に送信ボタンを無効にし、その値を「送信してください。お待ちください...」のようなよりわかりやすいものに変更することもあります
たとえば、このボタンをクリックしてみてください。このページをリロードするまで無効のままになります:
最初のステップは、送信ボタンに一意の ID (例: id="myButton":
) を与えることです。
2 番目 (最後の) ステップは、2 つの Javascript コマンドに

のタグを付けることです。 1 つ目は、フォームの送信後に送信ボタンを無効にするようにブラウザーに指示し、2 つ目は、何が起こっているのかユーザーにわかるようにボタンのテキストを変更します。これはフォームのマークアップに追加するコードです:
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='送信中です、お待ちください...';"
フォームのマークアップは次のようになります:
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='送信中です、お待ちください...';"
>
それでおしまい。この方法は、ほとんどのブラウザ (IE+、FireFox、Opera など) で機能します。
»複数のフォーム送信で Cookie が使用されないようにする
ブラウザー セッション全体 (またはそれ以上) で繰り返し送信されることを避けたい場合は、Cookie の使用を検討してください。たとえば、独自のフォーム処理スクリプトを編集するブラウザは、フォームの処理後、HTML またはリダイレクト プリントヘッドが処理される前に Cookie を送信します。このコードを mail() コマンドの後に置くと、ほとんどの場合機能するはずです:
setcookie('FormSubmitted', '1');
次に、処理する前に Cookie を確認します。アクティブなブラウザ セッションがある場合、この訪問者はすでにフォームを送信しています。次のコードをフォームの処理開始スクリプトに追加します:
if (isset($_COOKIE['FormSubmitted'])
{
Die('このフォームを送信できるのはセッションごとに 1 回だけです!');
}
それです
Cookie を使用した重複送信を防ぐために変更された場合。注: 上記のスクリプトと Cookie 出力コード呼び出しの後に、mail() 関数にコードを追加します。
/* 重複送信を防止 */
if (isset($_COOKIE['FormSubmitted'])
{
Show_error('このフォームを送信できるのはセッションごとに 1 回だけです!');
}

/* 電子メール受信者を設定します */
$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() 関数を使用してメッセージを送信します */

mail($myemail, $subject, $message);

/* 重複送信を防ぐために Cookie を設定します */

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)
{
?>

次のエラーを修正してください:



exit();
}
?

www.bkjia.com本当http://www.bkjia.com/PHPjc/477927.html技術記事 HTML フォームを送信する場合、フォームが正常に送信されて応答ページが表示されるまでに数秒かかる場合があります。怠けて送信ボタンを何度もクリックしてしまうと、重複が発生する可能性があります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。