PHP多种形式验证和重定向

时间:2008-09-11 03:27:07

标签: php validation post

我有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之前,相同的想法仍然存在吗?

2 个答案:

答案 0 :(得分:4)

你可以在保存到会话对象后重定向到buy.php,然后将服务器重定向到check.php,这意味着当用户点击回来时,他们会回到GET请求而不是POST请求

答案 1 :(得分:1)

是的 - 我同意上述内容。我总是在距离最后一个帖子做redir之前,所以点击后退可以将它们弹回,而不会出现错误或重新提交。它也避免了并发症。您始终可以使用redir?m(即:&m)标记page.php?m链接页面,并将其放在页面顶部:(使用elseif之后)

if (isset($_GET['m'])) {
  echo 'order placed.';
}
else {
  //...
}

你也可以在一个页面上拥有它。只需将提交按钮submit1submit2命名为:(请记住,如果您使用图片进行提交,则会变为$_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">
}