题
我有 buy.php
与一个 形式 你输入的地方 商品、数量、运输数据等
当您单击 提交按钮, ,它发回 buy.php
($_SERVER['PHP_SELF'])
并进行一些数据验证。
如果有字段缺失或错误,则会突出显示。如果一切正确,我保存 $_POST
数据输入 $_SESSION
变量,然后执行 header('Location: check.php')
, ,我在其中显示数据,以便买家可以在实际购买之前最后一次检查信息。
现在,如果我在 check.php
然后点击返回按钮 buy.php
这样我就可以更改内容,浏览器会询问我是否要重新发送 POST 数据。我正在努力避免这种情况。
有人对 PHP Multiform 验证有什么好的建议或好的做法吗?
另外,如果我有 n 页供用户填写, buy.php, buy2.php, ... buyn.php
在 check.php 之前,同样的想法仍然成立吗?
解决方案
您可以在保存到会话对象后重定向到 buy.php,然后服务器重定向到 check.php,这意味着当用户单击返回时,他们将返回到 GET 请求而不是 POST 请求
其他提示
是的 - 我同意上面的观点。我总是做 redir
远离上一篇文章,因此单击“返回”会将它们退回,而不会出现该错误或重新提交。它还可以避免并发症。你可以随时标记 redir
链接页面带有 ?m
或者 &m
(IE。: page.php?m
)并将其放在页面顶部:(使用 elseif
之后)
if (isset($_GET['m'])) {
echo 'order placed.';
}
else {
//...
}
您也可以将所有内容都放在一页上。只需命名提交按钮 submit1
, submit2
, , 喜欢:(请记住,如果您使用图像进行提交,它将变成 $_POST['submit1_x']
:)
if (isset($_POST[submit1]) {
//validate + save session data from form1
//display form 2
} else if(isset($_POST[submit2])) {
//validate + save session data from form2
//display form 3
} else {
//display first form
//<input type="submit" name="submit1" value="Continue">
}