【问题标题】:How to pass variables received in GET string through a php header redirect?如何通过 php 标头重定向传递 GET 字符串中收到的变量?
【发布时间】:2012-08-01 22:50:57
【问题描述】:

在用户提交表单后,我从 Aweber 接收 GET 字符串中的值。我获取他们发送的变量并将它们提交到 SMS 网关,以通过短信通知第 3 方提交。

这是我的问题。我需要将在 php 标头中执行传出 SMS 命令的页面重定向到另一个页面,该页面最终显示从 Aweber 发送的 GET 变量。

我可以在第一页检索变量及其值。如何将它们传递到第二页?

这是我在第一页 (sms.php) 上用来收集 Aweber 发送的变量的代码:

   $fname   = $_GET['name'];
   $femail  = $_GET['email'];
   $fphone  = $_GET['telephone'];
   ....etc

   header('Location: confirmed.php');
   exit;

【问题讨论】:

    标签: php variables header get


    【解决方案1】:

    首先使用将$_GET HTTP 变量转换为查询字符串

    $query = http_build_query($_GET);
    

    然后将查询字符串变量附加到您的重定向标头

    header('location: domain.com'."?".$query);
    

    完成。

    【讨论】:

    • 如果您有 ?value=4%2e20 ,它将更改为 ?value=4.20 。稍后$_POST['amount_value'] == 4.20 将返回 false 。
    • 这个怎么样:$query = urlencode(http_build_query($_GET));
    【解决方案2】:
    session_start();
    $_SESSION['fname']   = $_GET['name'];
    $_SESSION['femail']  = $_GET['email'];
    $_SESSION['fphone']  = $_GET['telephone'];
    ....etc
    
    header('Location: confirmed.php');
    

    然后在下一页获取它,例如:

    session_start();
    $fname   = $_SESSION['fname'];
    $femail  = $_SESSION['femail'];
    $fphone  = $_SESSION['fphone'];
    

    ....等

    【讨论】:

    • 像魅力一样工作!尽管@Yan 基本上提出了相同的建议,但我感谢您的详细解释(这对这个新手有所帮助;)
    • 或者只是$_SESSION['get'] = $_GET;
    【解决方案3】:

    您不需要将它们存储在会话中,您可以轻松地将它们与您的位置标头一起传递:

    $fname   = $_GET['name'];
    $femail  = $_GET['email'];
    $fphone  = $_GET['telephone'];
    //now a header with these var's:
    header("Location: confirmed.php?name=".$fname."&email=".$femail."&telephone=".$fphone);
    

    在confirmed.php 中你可以使用$_GET 方法获取这些变量。

    【讨论】:

    • 嗯,我在此处发布问题之前尝试了此解决方案,但在回显它时,我得到的只是 Confirm.php 页面上的.$fname,而不是 GET 字符串中的实际值
    • 你能发布你的 php 代码,其中包含 header("location...) 和你想要回应的 confirm.php 吗?
    • 我在两个页面中都使用了相同的$fname=$_GET['name'];,因为两个字符串中的参数相同,即name=value
    • 当这个页面被调用时,你会立即被重定向到yourdomain.com/confirmed.php,这就是你在浏览器中看到的URL。你看到 URL 中的变量了吗?
    • 是的,但它们以confirmed.php?name=".$fname"&email=".$femail" 等形式出现,而不是实际值代替".$fname"".$femail"
    【解决方案4】:

    请对于将来阅读本文的任何人,使用会话进行这种变量值传输,因为如果您主要依赖于向标题添加变量,那么如果用户仍在该表单上并执行更改值的操作header 然后你自己的变量值会改变,因为它取决于 header......简单地说,使用 SESSIONS。

    【讨论】:

      【解决方案5】:

      将它们存储在session

       $_SESSION['fname'] = $_GET['name'];
      

      在每个文件的开头使用session_start

      【讨论】:

        【解决方案6】:

        试试这个。它对我来说非常有效。

        if ($_GET)
        {
            $query = str_replace("%3D", "=", str_replace("%26", "&", strval(urlencode(http_build_query($_GET)))));
        
            header('location: https://www.example.com'.'?'.$query);
        }
        else
        {
            header('location: https://www.example.com');
        };
        

        【讨论】:

          【解决方案7】:

          你能做的最好的就是把你所有的 POST 变量放到一个这样的会话中:

          在 page1.php 上放:

          //Start the session
          session_start();
          //Dump your POST variables
          $_SESSION['post-data'] = $_POST;
          

          然后在 page2.php 上放:(如果在 page1.php 上我们使用普通的 POST 表单提交表单 action="page2.php"

          //Start the session
          session_start();
          //Access your POST variables
          foreach ($_POST as $key => $value) {
              ${$key} = $value;
              $_SESSION[$key] = $value;
          }
          //Unset the useless session variable
          unset($_SESSION['post-data']);
          

          或者在 page2.php 上输入:(如果在 page1.php 上我们使用表单 action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?> 进行自我提交,然后使用 header("Location: page2.php"); 移动到 page2.php 并传递我们的 POST通过会话变量

          //Start the session
          session_start();
          //Access your POST variables
          $_POST = $_SESSION['post-data'];
          foreach ($_POST as $key => $value) {
              ${$key} = $value;
              $_SESSION[$key] = $value;
          }
          unset($_SESSION['post-data']);
          

          我确实花了好几个小时才弄清楚这一点,因为所有的论坛都把它弄错了或不完整。

          现在就像调用从 page1.php 传递的变量一样简单,例如:<b>Points: </b><?php echo $points; ?> 就是这样!!

          当将header('Location: page2.php'); 置于if 等条件中时,请确保它将位于页面的第一个PHP 脚本中并且位于任何HTML 输出之上。

          【讨论】:

            【解决方案8】:

            这个作品使用这个sentex

            header('location:member_dashboard.php?id='.$id);

            【讨论】:

              猜你喜欢
              • 2012-09-08
              • 1970-01-01
              • 2014-12-03
              • 1970-01-01
              • 2012-03-12
              • 2011-04-02
              • 2012-04-19
              • 2014-01-04
              • 1970-01-01
              相关资源
              最近更新 更多