我已经了解了HTML表单的PRG方法,这是一种避免重新提交问题的模型。我可以理解在电子商务中购买产品时的好处。即使您按下后退按钮或按F5(刷新),因为您已被重定向到GET页面,您将始终获得最终页面,您可以在其中说明购买是否正确,并且您永远不会得到原始POST页面,避免因此购买两次相同的项目(除了额外的服务器对策以避免这种情况)。
但我无法掌握注册表格的概念。在这种类型的形式中,您经常会错过某些字段或输入一些不正确的数据(例如,不匹配的密码和密码重复)。由于必须显示(服务器端)包含所有可能错误的消息,我会假设您保留在同一个POST页面中,并且在这种情况下PRG不适用。因为如果它适用,为了重新填充用户输入的原始数据,你必须使用POST-Redirect-GET,最后的GET包含所有原始提交的数据,然后,为什么不从一个GET表单开始一开始?我纠正还是错过了什么?
总结一下PRG的一键式数据(购买商品),注册表格的常用方法,联系表格等?
答案 0 :(得分:0)
使用GET请求显示数据,并让POST处理状态更改操作(更改凭据,下载文件等)。
让我们用一个简单的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 的)。