MENU

PRGを腹落ちさせる(ブラウザバックで困るケースへの処方箋)

POSTとGETの違い

ブラウザバックで「再送信しますか?」を出さないための作法。
この作法で組んだモックは以下。
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とは?

「PRG プログラム」という言葉は、主にウェブ開発におけるWeb技術の設計パターン「Post/Redirect/Get (PRG)」を指します。フォーム送信後の二重投稿を防ぐための手法で、サーバーがデータを処理した後、結果画面へ直接HTMLを返すのではなく、リダイレクト(別のURLへの転送)を用いて結果を表示する仕組みです。 

PRG (Post/Redirect/Get) の特徴と仕組み

  • 目的: フォーム送信(POST)後のリロードによるデータ二重登録(購入、投票など)を防ぐ。
  • 流れ:
    1. Post: ユーザーがフォームを送信(POST)。
    2. Redirect: サーバーは処理後、直接画面を返さず、GETリクエストによる別ページへのリダイレクト指示(303 See Other)を送る。
    3. Get: ブラウザはリダイレクトに従い、新しいページを取得(GET)して表示する。
  • メリット: ブラウザの戻るボタンや更新ボタンを押しても、POST処理が再実行されないため、ユーザー体験が向上する。
目次