【问题标题】:Passing POST data from one web page to another with PHP使用 PHP 将 POST 数据从一个网页传递到另一个网页
【发布时间】:2009-03-24 23:40:32
【问题描述】:

搜索没有找到类似的问题,所以:PHP用来生成一个页面的POST数据如何从那个页面传递到另一个PHP生成的页面?我有:

  • 第 1 页上的表单,通过 POST 将数据发送到 PHP 脚本。
  • 第 2 页由该脚本生成,并显示由外部程序使用第 1 页上的条目和后端数据库生成的一个或多个图形。此页面还有另一个表单,其中包含使用新选项重新生成图表的选项(例如放大或截断图表)。
  • 如果需要,将使用相同的 PHP 脚本生成第 3 页,并使用从第 1 页和第 2 页粘合在一起的 POST 数据。除了图表,其基本外观将与第 2 页相同。
  • 第 4、5、6 ... 页的生成方式应与第 3 页相同。

那么,如何将用于生成页面 2 的 POST 数据放入页面 3 的 POST 数据中?

编辑:由于组织政策,无法使用 cookie(因此会话不可行)。 GET 是不可取的,因为我们不希望输入显示在 URL 中。

【问题讨论】:

    标签: php post


    【解决方案1】:

    我记得很久以前就在这个问题上苦苦挣扎,想知道为什么我根本无法使用修改后的 POST 标头进行重定向。原因是重定向实际上被认为是 GET。

    无论如何,您需要将帖子变量存储在隐藏字段中。

    <input type="hidden" name="someValueFromPageOne" value="blah">
    

    我建议在每个表单中为所有字段名称添加前缀,以便在最后的合并阶段轻松区分它们。

    <input type="hidden" name="pageOne_firstName" value="Joe">
    <input type="hidden" name="pageTwo_streetNumber" value="22">
    

    编辑:正如其他人所提到的,使用会话持久化数据是一种可能性,但这成为维护临时状态的非常复杂的问题,例如页面刷新或使用后退按钮可能难以维护。除非您遇到极端情况,否则使用字段保存数据要容易得多,因为它们更容易在刷新和其他浏览器行为中存活。

    【讨论】:

    • 谢谢!我觉得我应该想到这一点,但我以前从未真正使用过隐藏字段,而且我有点专注于 PHP 本身的解决方案,而不是使用 HTML。
    • 相信我,我知道,我去过那里不止一次。不要忘记验证表单上的所有输入以及合并数据以避免注入攻击!!!
    【解决方案2】:

    Wez Furlong 最近在他的博客上写了 php5 版本(标题为 HTTP post from php, without cURL):

    function do_post_request($url, $data, $optional_headers = null)
    {
    $params = array('http' => array(
    'method' => 'post',
    'content' => $data
    ));
    if ($optional_headers!== null) {
    $params['http']['header'] = $optional_headers;
    }
    $ctx = stream_context_create($params);
    $fp = @fopen($url, 'rb', false, $ctx);
    if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
    }
    $response = @stream_get_contents($fp);
    if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
    }
    return $response;
    }
    

    在帖子中,他提到他总是要查找如何做到这一点。有趣的是,他是核心开发人员之一!

    【讨论】:

    • 假设你的意思是:netevil.org/blog/2006/nov/http-post-from-php-without-curl 它看起来很有希望,谢谢(虽然 2006 年对我来说不是“最近”!:-p)也许是我缺乏 PHP 经验,但我没有让它工作,看不到它如何将 POST 数据从一个页面发送到另一个页面。
    【解决方案3】:

    使用 GET。

    在我看来,POST 请求应该修改某些内容(例如,将记录添加到数据库)。 GET 请求应该检索某些内容(例如搜索查询的结果)。

    如果您仍然想使用 POST,请查看 PHP 会话。

    【讨论】:

    • 然而,GET 数据有一个明显的(和较低的)大小限制。
    • @cletus,我知道,但是 OP 没有给出任何关于在页面请求之间需要发送多少数据的指示。
    【解决方案4】:

    会话很痛苦,如果你需要它们,你已经实现了它们。

    正如@Soviut 上面所说,隐藏输入字段可能是解决这个问题的方法。

    【讨论】:

    • 同意,会话是可行的,但是为正确的页面维护正确的状态很烦人。更不用说服务器端非常消耗资源了,有那么多数据漂浮在各处。
    【解决方案5】:

    如果您决定使用 dbms 选项来关闭会话路由,我很幸运地设计了一个状态类来保存这些内容,并使用 JSON 将对象序列化到会话记录中的单个大字段。

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 2012-01-03
      • 2010-09-23
      • 2016-08-30
      相关资源
      最近更新 更多