提交擷取表單資料是表單應用中最常用的操作,經常需要PHP後台從前台頁面中擷取使用者在前台表單頁面中提交的各種資料。表單資料傳遞的方式有以下的兩種方法,一種為POST()方法,另外一種為GET()方法。具體採用哪種擷取資料的方法是由<form>表單的 method 屬性所指定的,下面講解這兩種方法在 Web 表單中的具體應用。
使用POST()方法提交表單
在使用POST()方法時,只需要將<form>表單中的屬性 method 設定成POST即可。 POST()方法不依賴於URL,不會顯示在地址欄。POST()方法可以沒有限制地傳遞資料到伺服器,所有提交的資訊在後台傳輸,使用者在瀏覽器端是看不到這一過程的,安全性會更高。所以POST()方法比較適合用於發送一個保密的(如銀行帳號)或者容量較大的資料到伺服器中。
下面的執行個體將使用POST()方法發送文字框資訊到伺服器,範例程式碼如下所示:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body><form action="index.php" method="post" name="form1"> <table width="300" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="30">訂單號: <input type="text" name="user" size="20"> <input type="submit" name="submit" value="提交"> </td> </tr> </table></form></body></html>
說明:在以上的代碼中,form表單的 method 屬性指定了 POST()方法的傳遞方式,並通過 action 屬性指定了資料頁為index.php。因此,當點擊“提交”按鈕後,即可提交文字框的資訊到伺服器,運行結果如下:
使用GET()方法提交表單
GET()方法在<form>表單中 method 屬性的預設方法。使用GET()方法提交表單資料的時候,資料會被附加到URL後面並顯示出來,作為URL的一部分發送到伺服器端去。在程勳開發過程中,由於GET()方法提交的表單資料時附加到URL上發送的,因此,在URL的地址欄中將會顯示如下的內容“URL地址+使用者傳遞的參數資訊”。
GET()方法的傳參格式如下:
其中,url為表單的響應地址(如 127.0.0.1/index.php), name1為表單元素的名稱,value1為表單元素的值。url和表單元素之間用“?”隔開,而多個表單元素之間用“&”隔開,每個表單元素的格式都是name=value,固定不變的格式和套路。牢記即可。
注意:若要使用GET()方法提交表單,URL的長度應限制在1MB字元以內。如果發送的資料量太大,資料將會被截斷,從而導致意外或失敗的處理結果。
下面建立一個表單來實現應用 GET()方法提交使用者名稱和密碼,並顯示在URL 地址欄中。添加一個文字框,命名為user;添加一個密碼域,命名為pwd;將表單的 method 屬性設定為 GET()方法,範例程式碼如下所示:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>form</title></head><body><form action="index.php" method="get" name="form1"> <table width="500" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="500" height="30"> 使用者名稱:<input type="text" name="user" size="12"> 密 碼:<input type="password" name="pwd" id="pwd" size="12"> <input type="submit" name="submit" value="提交"> </td> </tr> </table></form></body></html>
運行這個執行個體,在文字框中輸入使用者名稱和密碼,點擊“提交”按鈕後,文字框內的資訊就會顯示在URL地址欄中,如下面的圖所示:
這裡可以很明顯的發現,GET()方法會將參數暴露在地址欄中。如果使用者傳遞的參數是非保密性的參數(如id=8),那麼採用
GET()方法傳遞資料是可行的;如果使用者傳遞的保密性的參數(如密碼等),使用這種方法傳遞資料是不安全的。解決該問題的方法是將表單中的 method 屬性預設的GET()方法替換為POST()方法。