2014-02-15 52 views
2

這更像是一個「理解」問題,即一個具體示例。我來自一個Python/R /科學計算背景,我通常編譯事物或通過口譯員進行交流。但是一切都在機器上,所以服務器/客戶端之間沒有「通信」。瞭解如何在PHP中處理POST表單

我現在正在嘗試學習PHP(希望讓用戶從Web界面運行我的腳本),並且很好奇在POST期間會發生什麼。

請看下面的代碼:

<!DOCTYPE html> 
<html> 
<head> 
<title>Form Testing</title> 
<meta charset="utf-8"/> 
</head> 
<body> 

<?php 
    if($_POST['formSubmit'] == "Submit") { 
    echo "Post Status is: ".$_POST['formSubmit']."\n"; 
    $varMovie = $_GET['formMovie']; 
    echo "Your Favorite Movie Was: ".$varMovie; 
    }else{ 
    echo "Post Status is: ".$_GET['formSubmit'] ."\n"; 

    } 
?> 

<form action="index.php" method="post"> 
    Which is your favorite movie? 
    <input type="text" name="formMovie" maxlength="50"> 
    <input type="submit" name="formSubmit" value="Submit"> 
</form> 

</body> 
</html> 

我得到了Submit按鈕發送Python字典的當量(關聯數組?)到下一個頁面。然後命令$ _POST ['formSubmit']拉起該值。

但是,當我點擊提交按鈕到頁面加載時,它們之間的值在哪裏。換句話說,在sumbit按鈕之後,究竟發生了什麼?顯然,頁面必須在某處創建這個關聯數組,並以某種方式傳遞它,但我不確定它是如何實現的。

帶有get的想法似乎更清晰。這個URL被追加了,所以PHP引擎可以讀取URL字符串,並找到所有變量的值(我假設這是會發生的)。

謝謝你的幫助!

+1

簡而言之,Apache(或其他)從http請求中爲您填充它。您可以使用任何流量記錄程序(包括Chrome的開發工具)觀察該http請求。 –

+0

您正在使用POST方法,但嘗試使用'$ _GET'來讀取它,將其更改爲'$ _POST'。是的,它根據你的URL和表單方法是如何創建一個關聯數組到'$ _GET'或'$ _POST'。 – Prix

+0

@Prix如果他的表單的方法設置爲GET,他的代碼將正常工作 –

回答

3

HTTP GET通過查詢字符串通過URL的所有數據:

<form method="GET" action="http://example.com/script.php" 
    <input type="hidden" name="key" value="value" /> 
    <input type="submit" /> 
</form> 

該網址將成爲HTTP請求的報頭的一部分:

http://example.com/script.php?key=value 
           ^^^^^^^^^^---GET query parameters 

這可以通過已經完成的:

GET /script.php?key=value HTTP/1.1 
Host: example.com 
Header1: value1 
Header2: value2 
Cookie: something=whatever 

A GET請求沒有'body'部分 - 請求的全部內容都包含在URL的剩餘部分中。

HTTP POST也可以查詢參數如果需要的話,但一般通過POST操作提交的任何HTTP請求的「身體」部分中發送數據:

POST /script.php?key=value HTTP/1.1 
Host: example.com 
Header1: value1 
Header2: value2 
Cookie: something=whatever 

foo=bar 

,這將被產生過以下形式:

<form method="POST" action="/script.php?key=value" /> 
    <input type="hidden" name="foo" value="bar" /> 
    <input type="submit" /> 
</form> 

請注意標題和密鑰foo之間的空行。該行是網絡服務器如何知道標題完成和正文開始的時間。

對於這個特殊的範例POST請求,你會結束:

$_GET['key'] = 'value'; // from the requested URL 
$_POST['foo'] = 'bar'; // from the request body 

還有在PHP中,這是一個內部PHP只構造,結合各種來源,包括$ _GET和$ _POST $_REQUEST整合到單一的單一數據結構中,但其數據來自完全相同的數據源。

+0

真正的'nuff,但它是http規範的沉默部分,而不是應該依賴的功能 –