簡體   English   中英

使用 PHP 將 POST 數據從一個 web 頁面傳遞到另一個頁面

[英]Passing POST data from one web page to another with PHP

搜索沒有找到類似的問題,所以:如何將PHP用來生成一個頁面的POST數據從那個頁面傳遞到另一個PHP生成的頁面? 我有:

  • 第 1 頁上的表單,通過 POST 將數據發送到 PHP 腳本。
  • 第 2 頁由該腳本生成,並顯示由外部程序使用第 1 頁上的條目和后端數據庫生成的一個或多個圖形。 此頁面還有另一種形式,其中包含使用新選項重新生成圖形的選項(例如放大或截斷圖形)。
  • 如果需要,第 3 頁將使用相同的 PHP 腳本使用從第 1 頁和第 2 頁粘合在一起的 POST 數據生成。除了圖表,其基本外觀將與第 2 頁相同。
  • 第 4、5、6... 頁應以與第 3 頁相同的方式生成。

那么,如何將用於生成第 2 頁的 POST 數據放入第 3 頁的 POST 數據中呢?

編輯:由於組織政策,cookies 不能使用(因此會話不可行)。 GET 是不可取的,因為我們不希望輸入顯示在 URL 中。

我記得很久以前在這個問題上苦苦掙扎,想知道為什么我根本無法使用修改后的 POST header 進行重定向。 原因是重定向實際上被認為是 GET。

無論如何,您需要將帖子變量存儲在隱藏字段中。

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

我建議在每個表單中為所有字段名稱添加前綴,以便在最后的合並階段輕松區分它們。

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

編輯:正如其他人所提到的,使用會話持久化數據是一種可能性,但這成為維護臨時 state 的一個非常復雜的問題,例如頁面刷新或使用后退按鈕可能難以維護。 除非您面臨極端情況,否則使用字段保存數據要容易得多,因為它們更容易在刷新和其他瀏覽器行為中存活。

Wez Furlong 最近在他的博客上寫了 php5 版本(標題為 HTTP 帖子來自 php,沒有 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;
}

在帖子中,他提到他總是必須查找如何做到這一點。 有趣的是,他是核心開發人員之一!

使用 GET。

在我看來,POST 請求應該修改一些東西(例如向數據庫添加記錄)。 GET 請求應該檢索一些東西(例如搜索查詢的結果)。

如果您仍然想使用 POST,請查看 PHP 會話。

會話是一種痛苦,如果你需要它們,你已經實現了它們。

正如@Soviut 上面所說,隱藏的輸入字段可能是 go 的方式。

If you decide to bite off the session route with the dbms option, I've had luck designing a state class to hold this stuff, and serializing an object using JSON to a single large field in the session record.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM