我有一系列输入表单,所有表单都采用不同的表单操作。每个验证输入。如果没问题,他们会转到不同的成功页面。如果失败,我希望表单操作/验证页面设置$ _SESSION ['error_messages']并转到显示错误并具有“重新提交”按钮的公共页面。
问题...如何从重新提交按钮返回到许多可能的输入表单之一的错误?
编辑:我不知道$_SERVER['HTTP_REFERER']
将如何运作。再次:形式 - >验证 - > error_page
所以,我想validation
必须从$ _SERVER ['HTTP_REFERER']
答案 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>