ユーザーが「送信」ボタンをクリックすると、ボタンは灰色になり使用できなくなります。
上記の例では、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 ‘请不要刷新本页面或重复提交表单!’; </span></li><li class="alt"><span>} </span></li><li><span>}</span><span class="tag">?></span><span> </span> </li> </ol>
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>
上記の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 ‘请不要刷新本页面或<br />重复提交表单!’; </span></li><li><span>} </span></li><li class="alt"><span>}</span><span class="tag">?></span><span> </span></span></li></ol>