転載元: http://www.hlmblog.com/183.html
フォームを送信する際、ネットワーク速度などの影響でページの読み込みが突然遅くなる場合があります。ユーザーが送信ボタンを繰り返しクリックすると、多くのエラーが発生します。データベース内で生成され、制御不能な状況につながります。
たとえば、次の状況ではフォームが繰り返し送信されます:
送信ボタンを 2 回クリックします。
更新ボタンをクリックします。
ブラウザの戻るボタンを使用して前の操作を繰り返すと、フォームが繰り返し送信されます。
ブラウザ履歴を使用してフォームを繰り返し送信します。
ブラウザからの重複した HTTP リクエスト。
ウェブページが悪意を持って更新されました。
ここにいくつかの解決策があります:
1: js を使用して、クリック後にボタンが灰色になるように設定します
$(document).ready(function(){ $(input:submit).click(){ setTimeout(function(){obj.disabled=true;},100) }; });
2: セッションを使用します
セッション (フォームがリクエストされたときに生成されるマーク) は、フォーム。
このメソッドを使用して、フォーム データを受信した後にフラグ値が存在するかどうかを確認し、最初にフラグ値を削除してからデータを処理します。存在しない場合は送信されたことを意味し、この送信は無視されます。
//服务端生成随机数存入session, 分配至表单页 $data['sess_id'] = $_SESSION['sid'] = mt_rand(1000, 9999); $this->load->view('form', $data); //表单页隐藏域存放此session值 <input type="hidden" name="sid" value="<?=$sess_id; ?>"> //处理 if($_POST['sid'] != '' && $_POST['sid'] == $_SESSION['sid']) { unset($_SESSION['sid']); echo '处理数据'; } else { echo '已提交过表单'; }
3: Cookieを使用する
if(isset($_POST['submit'])){ setcookie("tempcookie","",time()+30); header("Location:".$_SERVER[PHP_SELF]);exit(); } if(isset($_COOKIE["tempcookie"])){ setcookie("tempcookie","",0);echo "您已经提交过表单"; }4: ヘッダー関数を使用してジャンプ一度ユーザーが送信ボタンをクリックし、処理します。 データが完了したら、他のページに移動します
if (isset($_POST['submit'])) { header('location:success.php');//处理数据后,转向到其他页面 }5: データベースを使用して制約を追加します
ユーザーが繰り返し送信していることが判明したら、データベースに一意の制約を追加するか、一意のインデックスを直接作成します。 、警告またはプロンプトが直接スローされます
。
以上、フォームの繰り返し送信を回避するためのPHPメソッドを内容も含めて紹介しましたので、PHPチュートリアルに興味のある友人の参考になれば幸いです。🎜