我有一个提交到同一页面的表单。现在,当它被提交和处理后,我需要它有一个唯一的查询字符串。
例如,用户输入一些信息,然后单击提交,然后页面将信息保存在服务器上,然后服务器将其吐出,并为该信息提供一个唯一的查询字符串。
如果我尝试设置$_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重定向。