ページのリフレッシュによるデータベースへのデータの再書き込みを回避する方法

1993 ワード

フォームのデータがこのページにコミットされてデータベースに書き込まれている場合、ポイントコミット後、ページをリフレッシュするとデータがデータベースに繰り返し書き込まれます.ソリューションは次のとおりです.
一、一つのページを二つに分けて、データを別のページに提出して処理してから、入力ページにジャンプします.
総じて言えば、これは良い解決策です.ただし、ユーザーがブラウザの戻るボタンを使用して前のページに戻ってからページをリフレッシュし、データを繰り返し挿入しないようにします.
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
    //     ,      ,         
    header('location:submits_success.php');     //   JSP   sendRedirect  
}
二、データが入庫する前に検証クエリーを実行し、データベースに同じレコードが存在するかどうかを確認し、データを書き込むかどうかを決定します.
三、PHPのSession機能を利用して、フォームの重複提出も避けることができる.Sessionはサーバ側に保存されており、PHPの実行中にSession変数を変更することができ、次回この変数にアクセスすると新たに付与された値が得られるので、フォームにコミットされた値を1つのSession変数で記録することができ、一致しない場合はユーザが繰り返しコミットしていると考えられる.例:
Aページのコード:


:

Bページのコード:

最近お年玉をもらう項目をクリックしました.最初のページには「お年玉をもらう」ボタンがあります.urlは:/index/add_です.hongbao/ユーザーidは、このボタンをクリックするとコントローラにadd_を見つけます.hongbaoメソッドでは、insert操作を実行し、データベースに当選記録を挿入し、当選のヒントページを返しますが、このページで問題が発生します.このプロンプトページのurlは/index/add_なのでhongbao/ユーザーidなので、ページのリフレッシュを繰り返すだけで、データベースにレコードを繰り返し挿入できます!1人のユーザが複数のお年玉を受け取ることができるため,ユーザidに基づいてデータの再挿入を許可するか否かを判断することはできない.この時点でページジャンプしかできませんadd_を実行するとhongbao()このメソッドはレコードを挿入した後、head()メソッドを使用して/index/add_にジャンプします.hongbao 2は、この方法ではデータベース操作がなく、当選のヒントページだけを返すことで、ユーザーがページの重複リフレッシュを防止することができます.
拡張読解:JQueryスクリプト-ボタンを無効にしてフォームの再送信を防止