2011-01-10 58 views
4

我想知道是否有人可以幫助再次發佈$_POST值。假設我將表單值發佈到post.php其中我可以通過訪問數據$ _POST$ _REQUEST變量。但我怎麼能張貼$ _POST到另一個網址比如說post_one.php和訪問數據嗎?

+0

您是否想在沒有用戶干預的情況下執行此操作,或者只需重新發布其他表單? – 2011-01-10 17:28:53

+1

如果您需要向用戶顯示另一個頁面,則沒有辦法。 – 2011-01-10 17:31:27

+0

與用戶干預和用戶重定向到另一個頁面。但最好不要創建隱藏的表單:-) – m1k3y3 2011-01-10 17:33:02

回答

3

如果你想保留POST數據,同時將用戶重定向(即瀏覽器),創建一個包含POST數據的新形式(確保你使用htmlspecialchars),然後提交這個(它發送到新的目標位置)。

如果這完全是服務器端,您可以使用cURLfile_get_contents做一個簡單的POST請求。 php.net有很多關於這個話題的信息。

2

以cURL爲例。您可以將$ _POST作爲後置數組傳遞。

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://example.com/post_one.php'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); 
curl_exec($ch); 
15

您必須向您的網址發出HTTP POST請求。一個選項是使用file_get_contents來執行此操作並提供上下文。使用stream_context_create可以輕鬆創建上下文。一個例子是:

$data = http_build_query(
    array(
     'first' => 'your first parameter', 
     'second' => 'your second parameter' 
    ) 
); 

$headers = array('http' => 
    array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $data 
    ) 
); 

$context = stream_context_create($headers); 
$result = file_get_contents($url, false, $context); 

這將發出一個POST請求$網址。 $_POST['first']$_POST['second']將在您的目標網址中可用。

如果你想重新發布張貼的所有變量,替換第一行:

$data = http_build_query($_POST); 
1

我假定你想要的第二URL是用戶可見,在這種情況下,有一個方法數量:

  1. 只需將相關數據添加到表單的隱藏字段中並將表單發佈到新位置。

  2. 將相關數據存儲在$ _SESSSION變量中,並使用header('Location: /...');重定向到新目標。然後,您可以從所需位置的$ _SESSION數組中檢索數據。

  3. 將所需的變量添加到查詢字符串,並使用header('Location: /...xxx.php?example=true');重定向到新的目標。數據將通過$ _GET超全局數組提供。

其中,我推薦第二種方法,因爲它會阻止數據對最終用戶可見。

1

這取決於你在post_one.php,如果它只是功能,他們需要從post.php中同一$ _POST變種的工作,那麼你可以只包含文件:

include 'path/to/post_one.php'; 

其中的函數將有權訪問$ _POST。

但是,如果它輸出一些類型的HTML或需要重定向到它正常工作,那麼它可能會很麻煩,不那樣做..

0

post.php

session_start(); 
$_SESSION['POST'] = $_POST; 

然後在post_one.php

session_start(); 
$_POST = $_SESSION['POST']; 

其實是不需要的最後一行,則可以通過$_SESSION['POST']直接訪問數據。