PHP重定向回到用户所在的位置

时间:2012-08-06 16:55:37

标签: php

假设我有这个脚本:

http://www.example.com/profile.php?uid=12345

在这个脚本中,有一个发送消息功能,由sendmessage.php处理。 sendmessage.php实际上做的是将某些内容插入数据库,然后重定向回用户启动的位置(profile.php?uid = 12345)。

我尝试使用标题(“Location:profile.php”)。

但是由于profile.php在URL中需要?uid = 12345 [并且它是动态的],我的重定向计划无效。

如何'传递'当前网址。在我的情况下'profile.php?uid = 12345'使用GET方法sendmessage.php。然后,一旦sendmessage.php完成处理,将用户发送回自己的屏幕(profile.php?uid = 12345)?

提前致谢。

6 个答案:

答案 0 :(得分:2)

试试这个:

header("Location: " . $_SERVER['HTTP_REFERER']);

来自PHP.net的注释:

The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.

答案 1 :(得分:1)

如果您使用表单将数据发送到profile.php?uid=12345,请在sendmessage.php中 然后你可以有一个隐藏的字段,如 -

<input type="hidden" name="redirect_to" value="<?=$_SERVER['REQUEST_URI']?>">

然后在sendmessage.php中你可以使用`header(“Location:”。$ _ REQUEST ['redirect_to']);'

答案 2 :(得分:0)

一个技巧是填充链接本身的信息,这样当你去另一个页面时,那些参数仍然存在...如果你愿意,你可以使用param作为前一个url。

答案 3 :(得分:0)

另一个选择是确保您将uid作为表单提交数据的一部分发送。

然后,您可以使用传入的值重建URL:

header(“Location:profile.php?uid =”。$ _GET [“uid”]);

或者,将用户ID存储在其会话中。这样它总是在$ _SESSION [“uid”]中可用,你不必记得在表单中创建一个无关紧要的字段。

答案 4 :(得分:0)

你应该将变量传递给sendmessage.php,如

sendmessage.php?uid=<?php echo (isset($_GET['uid']) ? (INT)$_GET['uid'] : 'default') ?>

然后在sendmessage.php上。使用像

这样的东西
header("Location: profile.php?uid=" . (isset($_GET['uid']) ? (INT)$_GET['uid'] : 'default') ); 

答案 5 :(得分:0)

您可以使用GET和一些JavaScript。使用此方法可以避免使用PHP标头函数的问题。

echo "<script type=\"text/javascript\"> window.location = \"profile.php?uid=" . $_GET["uid"] .    "\"</script>";

确保检查“uid”是否实际通过。您还可以在用户首次登录时将uid存储在会话变量中,然后在我的示例中使用它,从而避免使用GET。无论哪种方式都有效。