本文章來給大家介紹一個入門教程關於PHP表單提交資料之get,post執行個體,有需要瞭解的同學可進入參考參考。
1.什麼是表單
所謂表單,說簡單點就是一對form標籤。即: 。
2.表單的作用
表單的作用是採集用戶端提交的資料,並把資料提交給服務端。
比如在登入一個網站時,你需要輸入自己的使用者名稱和密碼才能登陸。又比如你註冊遊戲帳號時,你需要填寫自己的郵箱、密碼、年齡等等。
這些操作就要通過表單提交給伺服器,最後由伺服器記錄在資料庫。(不是所有)
3.表單的組成
表單的兩個標籤必須是成對出現的:。
form標籤有兩個必填的屬性 : action,method。
action的作用是指定要提交到伺服器的地址,比如我要提交到本站的info.php檔案,那麼就寫成
再建立info.php檔案,內容:
| 代碼如下 |
複製代碼 |
$username = $_GET["username"]; //擷取使用者名稱 $password = $_GET["password"]; //擷取密碼 //列印輸出 echo “您輸入的使用者名稱為:” . $username . “,密碼為:”. $password ; ?> |
友情提示:以上所有引號和分號均為英文狀態下的引號和分號,中文的話會報錯滴!!如有中文引號請自行修改 ^^
理解form的get和post
在HTML中,form元素用method屬性來指定有兩種不同的提交方法,即”get”(預設值)和”post”。
1. get和post的定義
W3C的HTML 4.01 specification說,form元素的method屬性用來指定發送form的HTTP方法。
* 使用get時,form的資料集(形如control-name=current-value的索引值對)被附加到form元素的action屬性所指定的URI後面;
* 使用post時,form的資料集(形如control-name=current-value的索引值對)被封裝在請求的body中並被發送。
這可以簡單地理解為,get僅僅是拼接一個URI,然後直接向伺服器請求資料(需要提交給伺服器的資料集包含在URI中)。比如:
這個form在提交的時候,會產生這樣能夠一個get請求:FormGet.aspx?ProductID=1。
而post會把form的資料集,即ProductID=1這個索引值對封裝在請求的body中,發送給伺服器,然後向伺服器請求資料。對於:
這樣一個form在提交時,我們將看到一個乾淨的URI:FormPost.aspx。因為資料不是拼接在URI中。
2. get和post的區別
2.1 安全性
如果用get提交一個驗證使用者名稱和密碼的form,一般認為是不安全的。因為使用者名稱和密碼將出現在URL上,進而出現在瀏覽器的記錄中。顯然,在對安全性有要求的情況下,應該使用post。
2.2 編碼
HTML 4.01 specification指出,get只能向伺服器發送ASCII字元,而post則可以發送整個ISO10646中的字元(如果同時指定enctype=”multipart/form-data”的話)。
注意get和post對應的enctype屬性有區別。enctype有兩個值,預設值為application/x-www-form-urlencoded,而另一個值multipart/form-data只能用於post。
2.3 提交的資料的長度
HTTP specification並沒有對URL長度進行限制,但是IE將請求的URL長度限制為2083個字元,從而限制了get提交的資料長度。測試表明如果URL超出這個限制,提交form時IE不會有任何響應。其它瀏覽器則沒有URL的長度限制,因此其它瀏覽器能通過get提交的資料長度僅受限於伺服器的設定。
而對於post,因為提交的資料不在url中,所以通常可以簡單地認為資料長度限制僅受限於伺服器的設定。
2.4 緩衝
由於一個get得到的結果直接對應到一個URI,所以get的結果頁面有可能被瀏覽器緩衝。而post一般則不能,參考5。
2.5 引用和SEO
出於和上面相同的原因,我們可以用一個URI引用一個get的結果頁面,而post的結果則不能,所以必然不能被seo/seo.html" target="_blank">搜尋引擎搜到。
3. 服務端的處理
在服務端的ASP.NET程式中,對於get,我們用Request.QueryString[control-name]來取得對應的=current-value;對於post,我們用Request.Form[control-name]。
我們也可以籠統地使用Request[control-name]。但這樣做的效率不如前者。我們可以用下面的程式比較
| 代碼如下 |
複製代碼 |
Request.QueryString和Request的效率: <%@ Page Language=”C#” %> Request.QueryString / Request |
同樣的辦法我們可以比較Request.Form和Request。
最後得到的結果(Request.QueryString[control-name] / Request[control-name]和Request.Form[control-name] / Request[control-name])大多數時候是小於1的。因此,我們因該盡量用Request.QueryString或 Request.Form來代替Request。
4. 正確地使用get和post
W3C的官方建議是:若且唯若form是等冪(idempotent)的時候,使用get。等冪是一個數學上的術語,其定義是:對於一個函數f : D -> D,如果D中的所有x滿足f (f x) = f x,那麼這個函數是等冪的。HTTP specification(比如RFC 2616)中,將等冪解釋為:多次相同請求產生的副作用,和一次請求的副作用相同。
打個比方,如果你提交一個form會從Google上查詢一個關鍵詞,那麼我們可以認為這個form是等冪的,因為1次提交和10次提交的副作用是差不多的(10次查詢可能會多消耗一些電能);如果你提交一個form是訂購一個終極大黃蜂(Utimate bumblebee),那麼這就不是等冪的:要是你不小心多提交了1次form的話,你可能會被老婆亂罵,你不小心又提交了10次的話,你可能就破產了——一次提交和多次提交的副作用明顯不同,所以這不是等冪的。
所以,一般來說,如果提交這個請求純粹只是從服務端擷取資料而不進行其他動作,並且多次提交不會有明顯的副作用,應該使用get。比如:
* 搜尋引擎的查詢:http://www.google.com/search?q=yandixin;
* 分頁:ArticleList.asp?Page=1。
如果提交這個請求會產生其它操作和影響,就應該使用post。比如:
* 修改伺服器上資料庫中的資料;
* 發送一封郵件;
* 刪除一個檔案。
另一個要考慮的因素是安全性。見2.1。
5. 瀏覽器差異
* IE 6:URL長度限制為2083個字元;post之後,重新整理頁面不會自動重新post資料,會出現警告;
並且,在後退的過程中有可能出現“Page has Expired”(通常是向自己post,然後後退時):
微軟的技術支援人員號稱“this is not a bug or problem specified to the ASP.NET but a security feature of the IE Browser”,並且說“You can also inform your users of this”,實在是荒唐。另外,一篇KB也提到這個問題,說將Response.CacheControl設為”Public”即可,經測試僅在第一次後退時有效。
* IE 7:和IE 6相同;
* Firefox 2.0.0.11:重新整理頁面不會自動重新post資料,會出現警告;
* Opera 9.24:正常(自動post資料);
* Safari 3.0.4:post之後,重新整理頁面、前進、後退都不會自動重新post資料,會出現警告。
http://www.bkjia.com/PHPjc/628746.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/628746.htmlTechArticle本文章來給大家介紹一個入門教程關於PHP表單提交資料之get,post執行個體,有需要瞭解的同學可進入參考參考。 1.什麼是表單 所謂表單,說簡單...