谁发给你了?

时间:2010-11-30 06:40:38

标签: php

我有一系列输入表单,所有表单都采用不同的表单操作。每个验证输入。如果没问题,他们会转到不同的成功页面。如果失败,我希望表单操作/验证页面设置$ _SESSION ['error_messages']并转到显示错误并具有“重新提交”按钮的公共页面。

问题...如何从重新提交按钮返回到许多可能的输入表单之一的错误?


编辑:我不知道$_SERVER['HTTP_REFERER']将如何运作。再次:形式 - >验证 - > error_page

所以,我想validation必须从$ _SERVER ['HTTP_REFERER']

设置一个会话变量

4 个答案:

答案 0 :(得分:2)

使用$_SERVER['HTTP_REFERER']

但是,根据http://php.net/manual/en/reserved.variables.server.php

  

页面地址(如果有的话)   它将用户代理引用到   当前页面。这是由用户设置的   剂。并非所有用户代理都会设置   这个,有些提供了能力   修改HTTP_REFERER作为功能。在   简而言之,它无法真正被信任。

所以,就像Neal Donnan建议的那样,将module_name传递到隐藏的字段然后重新提交到http://project/'.$_POST['module_name']将是最好的

答案 1 :(得分:2)

使用HTTP_REFERER是一个选项,但可能不是最可行的选项,因为引用者标题很容易被欺骗(而且并非所有浏览器都会发送它)。这可能会也可能不会干扰您的流程。

最简单的做法是,因为您已在$_SESSION中设置错误消息,所以还要添加$_SESSION['redirect_url']值。

答案 2 :(得分:1)

您可以使用HTTP_REFERER标头,但这并不总是可靠的,因为浏览器需要设置它。

更可靠的方法是在每个表单中设置一个隐藏字段,并使用url重定向回。

答案 3 :(得分:1)

我假设您使用相同的脚本,如果不是发布您的代码:

输入页面:

<?php
/* this is the form page header */

/* parsing & filtering input */

if( my_form_is_valid($input_data) )
   give_the_answer();
else
   header('Location:' . $_POST['request_uri'] . '&status=error');  //make sure that's the first output

/* follow the DOM */
?>

<form id="myform">
   <!-- some fields -->
   <input type="hidden" name="request_uri" id="request_uri" value=<?=$_SERVER['REQUEST_URI']; ?>" />
</form>