php设置查询字符串


php setting the query string

我有一个提交到同一页面的表单。现在,当它被提交和处理后,我需要它有一个唯一的查询字符串。

例如,用户输入一些信息,然后单击提交,然后页面将信息保存在服务器上,然后服务器将其吐出,并为该信息提供一个唯一的查询字符串。

如果我尝试设置$_SERVER['QUERY_STRING'],它就会挂起。有别的办法吗?

重定向有可能吗?

编辑,我从mysite.com/开始,表单操作在mysite.com/上,我希望浏览器转到mysite.com/?blah

好的,我试着把这个放在我的页面顶部,但没有运气

<?php
if ($_POST['data']) header('location: /?' . idFromDifferentFunction() );
?>

但它只是不断加载,我猜它只是重定向到死亡。

我希望你现在明白我在尝试做什么

很有可能您的脚本在指示它应该重定向的代码之后继续运行。您还需要对标题更加精确:

<?php
    if (isset($_POST['data'])) {
        header('Location: /?' . idFromDifferentFunction() );
        exit;
    }
?>

如果使用上面的代码,它将使脚本退出,从而转储输出,浏览器将看到重定向(注意Location中的大写L)。

关键点是重定向标头后面的出口。如果没有它,PHP很可能会继续处理脚本中的任何其他代码。

目前还不完全清楚您想要的是什么,但我认为您的意思是,一旦处理完成,您希望转到查询字符串中具有唯一值的页面(?后面的位)。这个唯一的值是否需要实际引用系统中的某些内容(对于新创建的DB条目,它是否需要引用新条目的ID),还是只需要是唯一的?

如果是后者,你可以生成一个随机的唯一ID,如下所示:

header ('location: /path/to/script?id=' . uniqid ());

如果是前者,那么用数据库键的值替换对uniqid的调用。

$_SERVER中的值由PHP在运行时设置,应被视为只读。改变他们的价值观不会产生任何有意义的影响。

$_SERVER['QUERY_STRING']是PHP全局变量的一部分。您不应该设置这些变量,而是通过会话进行设置,并在提交后返回。

如果您试图将用户重定向到特定的URL,请使用:

header('Location: mysite.com/bla/bla');

写入$_SERVER毫无意义。它不会以任何方式影响客户端浏览器。如果要更改客户端浏览器中显示的查询字符串,则必须使用header('Location: ...')调用使用301/302重定向。