【问题标题】:php setting the query stringphp设置查询字符串
【发布时间】:2012-03-26 20:36:14
【问题描述】:

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

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

如果我尝试设置$_SERVER['QUERY_STRING'],它就会挂起。有没有其他方法可以做到这一点?

可以重定向吗?

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

好的,我试着把它放在我的页面顶部,但没有成功

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

但它只是一直在加载,我猜它只是将自己重定向到死亡。

我希望你现在明白我想要做什么

【问题讨论】:

    标签: php redirect query-string


    【解决方案1】:

    您的脚本可能会在说明它应该重定向的代码之后继续运行。您还需要更精确地使用标题:

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

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

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

    【讨论】:

      【解决方案2】:

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

      如果是后者,您可以 generate a random unique ID 执行以下操作:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 它需要与它来自的页面相同(也是操作所在的页面),但现在带有查询字符串
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2021-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-28
          • 2010-10-05
          • 1970-01-01
          相关资源
          最近更新 更多