ホームページ >バックエンド開発 >PHPチュートリアル >フォームの繰り返し送信を防ぐ PHP メソッド_PHP チュートリアル
ユーザーがフォームを送信すると、ネットワーク速度のせいで同じレコードが繰り返しデータベースに挿入されたり、Webページが悪意を持って更新されたりする可能性があります。これはより困難な問題です。同じフォームを繰り返し送信することを避けるために、クライアント側とサーバー側から同時に開始することができます。
1.クライアントスクリプトを使用する
[コード]xm l コード:
1
ユーザーが「送信」ボタンをクリックすると、ボタンは灰色になり使用できなくなります
上記の例では、on click イベントを使用してユーザーの送信ステータスを検出します。「送信」ボタンがクリックされると、ボタンはすぐに無効な状態に設定され、ユーザーはボタンを再度クリックして送信できなくなります。
これも Java vasscript の関数を使用する方法ですが、on submit() メソッドを使用します。コードは次のとおりです。
[コード]xm l コード:01
02 var submitcount=0;
03 function submitOnce (フォーム){
04 if (submitcount == 0){
05 submitcount++;
06 return true;
07 } 他{
08alert(「操作中のため、再度送信しないでください。よろしくお願いします!」);
09 return false;
10}
11}
12
13
上記の例では、ユーザーが「送信」ボタンをクリックした場合、スクリプトは現在のステータスを自動的に記録し、submitcount 変数を 1 ずつ増やします。ユーザーが再度送信しようとすると、スクリプトは submitcount 変数の値がゼロ以外の場合、フォームの二重送信を避けるためにユーザーに「送信済み」と表示されます。
2.セッションを利用する(JSPの処理方法と同じです)
PHP のセッション機能を利用すると、フォームの繰り返しの送信を避けることもできます。セッションはサーバー側に保存され、次回この変数にアクセスすると、セッション変数を使用して送信された値を記録できます。フォームが一致しない場合は、繰り返し送信しているユーザーとみなされます。
ページAのコード:
[コード]phpコード:
01 02 session_start(); //現在のSESSIONに基づいて乱数を生成します
03 $code = mt_rand(0,1000000);
04 $_SESSION['code'] = $code; //この乱数をセッションに一時的に格納します
;
05 ?>06
Bページ:
[コード]phpコード:
01 02session_start();
03if(isset($_POST['originator'])) {
04 if($_POST['originator'] == $_SESSION['code']){
05 echo "ok";
06 unset($_SESSION["code"]); //クリアして再度F5を押しても効果はありません
07 }その他{
08 echo "このページを更新したり、フォームを繰り返し送信しないでください";
09}
10}?>
。