搜索没有找到类似的问题,因此:如何将PHP用于生成一个页面的POST数据从该页面传递到另一个PHP生成的页面?我有:
那么,如何将用于生成第2页的POST数据放入第3页的POST数据中?
编辑:由于组织政策,不能使用cookie(因此会话不可行)。 GET是不受欢迎的,因为我们不希望输入显示在URL中。
答案 0 :(得分:13)
我记得很久以前一直在努力解决这个问题,想知道为什么我根本无法使用修改后的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">
编辑:正如其他人所提到的,使用会话持久保存数据是一种可能性,但这对于维护临时状态非常复杂,例如页面刷新或使用后退按钮会使维护变得困难。除非您遇到极端情况,否则使用字段保存数据要容易得多,因为它们更容易在刷新和其他浏览器行为中存活。
答案 1 :(得分:2)
使用GET。
在我看来,POST请求应该修改某些内容(例如,将记录添加到数据库中)。 GET请求应检索某些内容(例如搜索查询的结果)。
如果你想使用POST,请查看PHP会话。
答案 2 :(得分:2)
会话很痛苦,如果你需要它们,你已经实现了它们。
正如@Soviut上面所说,隐藏的输入字段可能就是这样做的。
答案 3 :(得分:2)
Wez Furlong最近在他的博客上写了php5版本(标题为来自php的HTTP帖子,没有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;
}
在帖子中他提到他总是要查找如何做到这一点。有趣,因为他是核心开发人员之一!
答案 4 :(得分:0)
如果您决定使用dbms选项咬掉会话路由,我很幸运能够设计一个状态类来保存这些东西,并使用JSON将对象序列化到会话记录中的单个大字段。