2016-06-30 65 views
0

我已經知道HTML表單的PRG方法,這是一種面向避免重新提交問題的模型。我可以理解在電子商務中購買產品時的好處。即使您按下按鈕或按F5(刷新),因爲您已被重定向到GET頁面,您將始終得到最終頁面,您可以在其中確認購買是否正確,並且您永遠無法獲得原始POST頁面,避免因此購買兩次相同的項目(除了額外的服務器對策以避免這種情況)。表單和註冊表單的PRG(POST/Redirect/GET)模型

但我無法理解註冊表格的概念。在這種類型的表單中,您會錯過某些字段或輸入一些不正確的數據(例如,不匹配的密碼和密碼重複),這是非常頻繁的。由於必須顯示(服務器端)帶有所有可能錯誤的消息,因此我會假設您保留在相同的POST頁面中,並且PRG在此情況下不適用。因爲如果它適用,爲了重新填充用戶輸入的原始數據,您必須使用POST-Redirect-GET和最終的GET以及所有原始提交的數據,然後,爲什麼不從GET中的GET表單開始開始?我是對的還是我錯過了什麼?

總結,一鍵式數據(購買物品)的PRG,註冊表單的常用方法,聯繫表單等?

回答

0

使用GET請求,用於顯示數據,並讓POST處理狀態更改操作(更改憑證,下載文件等)

GET方法不應該有服用 以外的行動的意義檢索(RFC 2616Wikipedia

讓我們從一個簡單的PHP例子解釋一下,你有三個文件:

  • loginForm.php(與登記表)
  • loginAction.php(與驗證函數)
  • 的welcome.php,如果登記成功的是,顯示歡迎消息

loginForm.php

<form method="post" action="loginAction.php"> 
    <input ...> 

loginAction.php

<? if(dataValidate($_POST)){ 
     header('Location: welcome.php'); 
    }else{ 
     $_SESSION[error] = "Data not vaild"; 
     header('Location: loginForm.php'); 
    } 
    die(); 

當loginAction.php收到POST數據時,檢查重定向用戶的位置。如果有錯誤,您可以存儲一個SESSION變量並將其顯示在loginForm.php中。


讓我們變得複雜一點的東西:應用POST數據的大量相同的頁面,所以loginForm.php和loginAction.php邏輯是在同一個文件。

在這種情況下,你應該只在有效註冊

的PRG模式絕對不要求你對所有職位進行重定向的情況下,將用戶重定向,只是已經改變的狀態的POST的數據。 (Source)。