表格和登记表格的PRG(POST / Redirect / GET)模型

时间:2016-06-30 05:19:35

标签: forms redirect post get submit

我已经了解了HTML表单的PRG方法,这是一种避免重新提交问题的模型。我可以理解在电子商务中购买产品时的好处。即使您按下后退按钮或按F5(刷新),因为您已被重定向到GET页面,您将始终获得最终页面,您可以在其中说明购买是否正确,并且您永远不会得到原始POST页面,避免因此购买两次相同的项目(除了额外的服务器对策以避免这种情况)。

但我无法掌握注册表格的概念。在这种类型的形式中,您经常会错过某些字段或输入一些不正确的数据(例如,不匹配的密码和密码重复)。由于必须显示(服务器端)包含所有可能错误的消息,我会假设您保留在同一个POST页面中,并且在这种情况下PRG不适用。因为如果它适用,为了重新填充用户输入的原始数据,你必须使用POST-Redirect-GET,最后的GET包含所有原始提交的数据,然后,为什么不从一个GET表单开始一开始?我纠正还是错过了什么?

总结一下PRG的一键式数据(购买商品),注册表格的常用方法,联系表格等?

1 个答案:

答案 0 :(得分: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中。

让一些事情变得复杂:许多应用程序将数据发布到同一页面,因此loginForm.php和loginAction.php逻辑位于同一个文件中。

在这种情况下,您应该仅在有效注册的情况下重定向用户

  

PRG模式绝对不需要您为所有POST执行重定向,仅适用于已更改数据状态的POST。 ( Source 的)。