ブラウザバックで「再送信しますか?」を出さないための作法。
この作法で組んだモックは以下。
https://dooop.net/form_back
また、上記のモックは同じファイル経路で新規登録と既存データの更新を行うモックも兼ねている。
ファイル経路の概要は以下の通り。
1)フォーム送信ページ:index.php / detail.php
2)通過ページ(リダイレクト):confirm.php
POSTデータをセッション保存
token発行してセッション保存
3)確認ページconfirm_view.php
セッションからデータ取り出してページ内に表示
フォーム送信(tokenのみ)
4)登録処理ページstore.php
1:セッションの入力データ有無チェック
→ないならエラーページへリダイレクト
2:POSTされたトークンの有無とセッション保存されたトークンとの突合
→ないならエラーページへリダイレクト
3:入力値の正規化(左右トリム)
4:必須チェック(これはフォーム側でやるかも)
IDの有無チェック(try catchブロックで処理)
ない場合→insert処理
ある場合→update処理
成功した場合→セッションのunset→完了ページへリダイレクト:complete.php
失敗した場合→try側の処理のロールバック→エラーページにリダイレクト:confirm_err.php
なお「PRG」とは、以下の通り。
「PRG プログラム」という言葉は、主にウェブ開発におけるWeb技術の設計パターン「Post/Redirect/Get (PRG)」を指します。フォーム送信後の二重投稿を防ぐための手法で、サーバーがデータを処理した後、結果画面へ直接HTMLを返すのではなく、リダイレクト(別のURLへの転送)を用いて結果を表示する仕組みです。
PRG (Post/Redirect/Get) の特徴と仕組み
- 目的: フォーム送信(POST)後のリロードによるデータ二重登録(購入、投票など)を防ぐ。
- 流れ:
- Post: ユーザーがフォームを送信(POST)。
- Redirect: サーバーは処理後、直接画面を返さず、GETリクエストによる別ページへのリダイレクト指示(303 See Other)を送る。
- Get: ブラウザはリダイレクトに従い、新しいページを取得(GET)して表示する。
- メリット: ブラウザの戻るボタンや更新ボタンを押しても、POST処理が再実行されないため、ユーザー体験が向上する。