我有 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">
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top