繁体   English   中英

成功执行任务后,将用户重定向到上一页

[英]redirect user on previous page after successfull task

在成功执行操作(例如编辑或删除任何项目)后,重定向用户的好方法应该是什么,在删除条件下,我们可以使用$_SERVER['HTTP_REFERER']但是在进行编辑的情况下,我们首先显示所有编辑表单,然后单击更新,因此,如果我们使用相同的方法,则会将用户重定向到编辑页面而不是主页。 希望您对我的困惑有所了解。 谢谢。

如果“更新”是通过表单帖子处理的,则只需输入一个隐藏的输入即可反映出着陆点。

<input type="hidden" name="next_url" value="foo.php" />

PHP使用该值作为重定向到的位置。

<?php
  // Do operations.
  header('Location: '.$_REQUEST['next_url']);

这一点特别重要,因为不能保证HTTP_REFERER正常工作。 它在大多数时间都有效,但是依赖它存在一些问题。

我建议不要使用HTTP_REFERER。

  1. 可能根本没有设置。
  2. 可以是任何东西,不要指望您的上一页。

我建议使用(如上所述)隐藏字段,会话存储或在应用程序中仅具有可靠的路由的可靠解决方案,以便您知道某人采用的路由。 选择最好的。

如果您对$_SERVER['HTTP_REFERER']满意,则可以将该值存储在会话信息中,并在完成编辑后将其重定向到该值。

例如,在显示编辑表单之前,您可以执行以下操作:

$_SESSION['originalReferer'] = $_SERVER['HTTP_REFERER'];

然后单击“更新”(如果成功):

header("Location: ".$_SESSION['originalReferer']);

但是同样,仅当您信任$_SERVER['HTTP_REFERER']时才使用它!

与上一个答案类似,我建议您跟踪要重定向到使用会话的页面。然后,一旦要重定向,只需使用

header('Location: '.$redirect_var);

之所以将其放在会话中而不是在表单中进行发布,是因为表单发布可以由用户操纵,而会话是服务器端的,完全在您自己的控制之下。

当您进入“编辑”页面并提交时,将URL保存在会话中,只需在执行更新查询后使用以下代码段即可:

header('Location: '.$_SESSION['redirect_url']);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM