【问题标题】:PHP forward POST variables to other pagePHP 将 POST 变量转发到其他页面
【发布时间】:2013-03-30 23:27:48
【问题描述】:

我有 html 表单,我必须在该表单所在的同一页面上提交该表单,添加 POST 变量,然后所有变量都传递到下一页。我试过这个:

     <form method="POST" action="">
        <input type="TEXT" name="names" />
        <input type="TEXT" name="email" />
        <input type="submit" name="send" />
     </form>

然后是这个 PHP 代码:

if($_POST['send']){

    $_POST['digest'] = "someText here";
    header("HTTP/1.0 307 Temporary redirect");
    header("Location:https://nextpage.com/form");

}

但是当我被重定向到另一个页面时,除了 "$_POST['digest']" 之外的所有 POST 数据都被发送。我该怎么办?

感谢和抱歉英语不好。

【问题讨论】:

  • 您必须将 digest 添加到 URL(这当然会将其转换为 GET 变量,具有长度限制等)我认为没有办法完全做到你想要什么。 (实际上我很惊讶浏览器将 POST 数据重新发布到新 URL。这是记录/预期的吗?)
  • @Pekka웃:它可能因浏览器而异。看到这个帖子:stackoverflow.com/questions/46582/…
  • @Alekc 谢谢!这是有用的信息。
  • 在我回答之前,您希望将数据发送到同一服务器上的文件吗?然后在一个页面上操作它(位于同一服务器上)?

标签: php javascript html


【解决方案1】:

您需要在要重定向到的 url 的查询字符串中传递变量。

http://www.php.net/manual/en/function.http-build-query.php

【讨论】:

  • @Haris 为什么不是您需要的?它可以帮助您为下一页构建 URL
  • @Haris 无法从 PHP 端将 POST 数据添加到浏览器的请求中。那么你就必须使用 Alekc 的解决方法。
【解决方案2】:

如果你使用 php 的 header 函数,你不能通过 POST 重新传输你的变量。

这里有 2 种选择:

  1. 在 $_GET 中转换 $_POST(例如 http_build_query)
  2. 如果您必须将此数据作为 POST 传输,您可以创建一个空白页面,其中包含输入 type="hidden" 的表单,然后使用 javascript 提交。有点难看,但应该可以。

【讨论】:

    【解决方案3】:

    您需要为此使用 cURL。

        $fields_string = "name=".$_POST['name']."&email=.$_POST['email'];
        $url = "the website you want to post to";
        $cx = curl_init();
            curl_setopt($cx, CURLOPT_URL,$url);
            curl_setopt($cx, CURLOPT_POST, true);
            curl_setopt($cx, CURLOPT_POSTFIELDS,$fields_string);
            curl_setopt($cx, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($cx, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($cx, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($cx, CURLOPT_FOLLOWLOCATION, FALSE);
        $init_response = curl_exec($cx);
        curl_close($cx);
    

    http://php.net/manual/en/book.curl.php

    【讨论】:

    • 这将从根本上改变 OP 正在做的事情。将不再有任何浏览器的上下文(打开的会话、cookie、客户端 IP、用户代理......)
    • @Pekka웃 为什么没有呢?下一页的内容存储在一个变量中,您可以根据需要显示它。是什么阻止您将session_start(); 放在该页面的顶部?老实说,我不明白你的反对意见。
    • 使用 curl,您的服务器 发出请求,而不是客户端的浏览器。 Curl 作为一个单独的客户端,它与用户的浏览器无关。无论是否存在session_start(),用户的会话 ID 都无法用于 curl。
    • @Pekka웃 这与问题有什么关系?他从来没有说过他需要会话..他甚至没有说他是否要发布到另一台服务器。据你所知,所有页面可能都在同一台服务器上..
    • 我不知道那天我在想什么。 @Pekka웃 是完全正确的,认为 OP 可以完成这项工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2017-08-16
    相关资源
    最近更新 更多