ホームページ > バックエンド開発 > PHPチュートリアル > PHP フォームの繰り返し送信の防止ルールについて話し合う_PHP チュートリアル

PHP フォームの繰り返し送信の防止ルールについて話し合う_PHP チュートリアル

WBOY
リリース: 2016-07-15 13:31:30
オリジナル
844 人が閲覧しました

ユーザーが「送信」ボタンをクリックすると、ボタンは灰色になり使用できなくなります。

上記の例では、OnClick イベントを使用してユーザーの送信ステータスが検出され、「送信」ボタンがクリックされると、ボタンはすぐに無効な状態に設定され、ユーザーはボタンを再度クリックして送信できなくなります。

別のメソッドもありますが、これも JavaScript の関数を使用しますが、OnSubmit() メソッドを使用します。コードは次のとおりです。上の例では、ユーザーがすでに「送信」ボタンをクリックしている場合、スクリプトは現在のステータスを自動的に記録し、ユーザーが再度送信しようとすると、submitcount 変数の値を

1 ずつ増分します。はゼロ以外であり、フォームが送信されたことをユーザーに通知するため、フォームの繰り返しの送信が回避されます。



2. Cookie 処理を使用します

Cookie を使用して、フォーム送信のステータスを記録します。次のコードを参照してください。

<ol class="dp-xml">
<li class="alt"><span><span class="tag"><</span><span> </span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"hidden"</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"originator"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"<?=$code?>"</span><span class="tag">></span><span> </span></span></li>
<li><span>在接收页面的PHP代码如下:  </span></li>
<li class="alt">
<span class="tag"><</span><span> ?phpsession_start();if(isset($_POST['originator'])) {  </span></li><li><span>if($_POST['originator'] == $_SESSION['code']){// 处理该表单的语句,省略  </span></li><li class="alt"><span>}else{  </span></li><li><span>echo &lsquo;请不要刷新本页面或重复提交表单!&rsquo;;  </span></li><li class="alt"><span>}  </span></li><li><span>}</span><span class="tag">?></span><span> </span>
</li>
</ol>
ログイン後にコピー
クライアントが Cookie を無効にしている場合、これが行われます。この方法では効果がありませんので、注意してください。

3.セッション処理を使用する

PHP のセッション関数を使用すると、PHP フォームの繰り返しの送信を回避することもできます。セッションはサーバー側に保存され、次回この変数にアクセスすると、セッション変数を使用して送信された値を記録できます。フォームに一致しない場合は、ユーザーが繰り返し送信していると見なされます。次のコードを参照してください:

<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ?php  </span></span></li><li><span>if(isset($_POST['go'])){setcookie("tempcookie","",time()+30);  </span></li><li class="alt"><span>header("Location:".$_SERVER[PHP_SELF]);exit();  </span></li><li><span>} if(isset($_COOKIE["tempcookie"])){  </span></li><li class="alt"><span>setcookie("tempcookie","",0);echo "您已经提交过表单";  </span></li><li><span>}</span><span class="tag">?></span><span> </span></span></li></ol>
ログイン後にコピー
ページ フォームの隠し値として乱数を渡します。コードは次のとおりです:

<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ?php  </span></span></li><li><span>session_start();//根据当前SESSION生成随机数  </span></li><li class="alt"><span>$</span><span class="attribute">code</span><span> = </span><span class="attribute-value">mt_rand</span><span>(0,1000000);  </span></li><li><span>$_SESSION['code'] = $code;  </span></li><li class="alt"><span class="tag">?></span><span> </span></span></li></ol>
ログイン後にコピー

受信ページの PHP コードは次のとおりです:

<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> </span><span class="tag-name">input</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"hidden"</span><span> </span><span class="attribute">name</span><span>=</span><span class="attribute-value">"originator"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"< ?=$code?>"</span><span class="tag">></span><span> </span></span></li></ol>
ログイン後にコピー


4.ヘッダー関数を使ってリダイレクトします

上記のPHPフォームの重複送信を防ぐ方法に加えて、より簡単な方法として、ユーザーがフォームを送信するとサーバー側で処理し、すぐに他のページにリダイレクトする方法もあります。コードは次のとおりです。

<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ?php  </span></span></li><li><span>session_start();  </span></li><li class="alt"><span>if(isset($_POST['originator'])) {  </span></li><li><span>if($_POST['originator'] == <br />$_SESSION['code']){  </span></li><li class="alt"><span>// 处理该表单的语句,省略  </span></li><li><span>}else{  </span></li><li class="alt"><span>echo &lsquo;请不要刷新本页面或<br />重复提交表单!&rsquo;;  </span></li><li><span>}  </span></li><li class="alt"><span>}</span><span class="tag">?></span><span> </span></span></li></ol>
ログイン後にコピー
上記は、PHP フォームの繰り返し送信を防ぐためのいくつかの方法の紹介です。


http://www.bkjia.com/PHPjc/446204.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/446204.html技術記事ユーザーが送信ボタンをクリックすると、ボタンは灰色になり使用できなくなります。 上記の例では、OnClick イベントを使用してユーザーの送信ステータスを検出します。送信ボタンがクリックされると、ボタン...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート