2009-04-26 41 views
2

我有一個PHP文件,吐出一個表單。我想調用這個PHP文件服務器端,(目前使用「包含」),填寫並提交。虛擬PHP表格

這樣更好,所以我不必介入實際的表單PHP,只需處理表示層,以便通過自己的PHP文件理解數據。

這可能嗎? 「方法」形式是POST。

回答

4

您將無法填寫表格並使用include()提交。提交表單意味着它必須通過HTTP到Web服務器,所以您要查找的是模擬POST請求。 PHP有一個叫做CURL的流行庫來做到這一點。

嘗試這樣:

$ch = curl_init('http://www.example.com/yourform.php'); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'var1=value1&var2=value2&whatever=stuff'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 

$output將包含頁面的輸出,如果你剛剛提交表單。

+0

這個CURL請求是否會在同一個會話中執行? (使用當前的PHP會話) 並且它會在相同的「環境」中執行嗎? (可以訪問全局變量)? – 2009-04-26 06:16:21

1

所以你想提交一個表格給自己?聽起來像CURL將是實現它的方式,但是你會創建另一個HTTP會話。否則,您可以模擬POST變量並從外部腳本中調用表單的操作。

+0

我明白了一部分有關在(可能只讀填充?)POST數據數組,但是如何調用表單的操作?我可以使用哪些PHP函數? – 2009-04-26 05:37:19

1

根據您的意見,這聽起來像是您試圖模擬在當前請求中提交此表單。我不確定你是否可以用cURL做到這一點 - 我認爲每個PHP腳本的調用都是獨立執行的,所以腳本當前運行的全局變量不會被處理cURL請求的運行共享。

我會處理這將創建一個函數來處理表單提交的方式:

function handle_form($postdata) { 
    // whatever you would normally do, just replace $_POST with $postdata 
} 

// to handle a normal form submission: 
handle_form($_POST); 

這樣,您就可以通過只創建一個與表單字段的陣列模擬提交表單值:

$formvals['fieldname1'] = 'fieldvalue1'; 
$formvals['fieldname2'] = 'fieldvalue2'; 

和主叫

handle_form($formvals);