PHP教學系列(六)-表單的運用$_GET和$_POST
在PHP程式開發裡,我們經常會使用到表單與使用者互動,因此表單功能是一個非常實用的功能。
當我們用HTML建立表單後,我們必須再編寫程式用來取得表單的資料,以進行對表單的資料處理。
常見取得表單的值有兩種方法,一種是 GET 另一種是 POST 。本章將會介紹 GET 和 POST 表單傳送和接收方法和建立表單介紹。
運作原理:當我們按下表單提交按鈕時,會將表單區域內的表單資料,傳送至指定的位置做處理。
表單區域指的是以<form>…</form>標籤所包覆的區域,在<form>內設定action指定傳送的頁面,method設定傳送的方式,而method有兩種屬性參數值:(GET和POST),這就是本章要介紹的表單傳送和接收方法。
GET和POST兩者之間的差異:
GET:表單的資料將會以字串的方式附加在網址後面,以[?]做為開頭,並以[&]區分每個欄位值。
範例:
http://aidec.tw?a=10&b=8
POST:表單資料將放置在http標頭。
在傳遞簡單參數時,可以使用get方法,而當要傳送安全性(如:密碼)或參數較多的資料時,就用POST,因為如上範例可得知,GET方法是以附加在網址的方式傳送資料的,因此若使用GET傳送密碼則會被看光光,而且URL是有字數限制的不適合傳送大量資料。
GET和POST表單傳送和接收:
傳送方式 | 接收方法 |
---|---|
GET | 使用$_GET[“欄位名稱”]接收欄位的值。 |
POST | 使用$_POST[“欄位名稱”]接收欄位的值。 |
$_POST基本範例:
<form action=”php-example-6-1-action.php” method=”post”>
<p>性名: <input type=”text” name=”name” /></p>
<p>年齡: <input type=”text” name=”age” /></p>
<p><input type=”submit” /></p>
</form>
接收處理參數 (php-example-6-1-action.php)
<?php
echo “性名”.$_POST[“name”];
echo “年齡”.$_POST[“age”];
?>
實際範例:php-example-6-1.php
預覽效果:
提交表單後,由php-example-6-1-action.php處理表單動作。
有時我們要驗證表單時,不希望跳轉到其它頁面,這時我們可以令表單傳送給自己,範例如下:
<form action=”” method=”post”>
<p>性名: <input type=”text” name=”name” /></p>
<p>年齡: <input type=”text” name=”age” /></p>
<p><input type=”submit” /></p>
</form>
<?php
if($_POST){
echo “性名”.$_POST[“name”];
echo “年齡”.$_POST[“age”];
}
?>
要將表單傳送給自己,只需將action設為空,再用if($_POST)來判斷處理資料。
實際範例:php-example-6-2.php
預覽效果:
提交表單後,仍在同一個頁面上處理動作。
$_GET基本範例:
<form action=”” method=”GET”>
<p>性名: <input type=”text” name=”name” /></p>
<p>年齡: <input type=”text” name=”age” /></p>
<p><input type=”submit” /></p>
</form>
<?php
if($_GET){
echo “性名”.$_GET[“name”];
echo “年齡”.$_GET[“age”];
}
?>
將<form>表單的method改成GET,也將取得參數改成$_GET[“欄位名稱”]。
預覽效果:
從下圖便可得知GET方法會將參數附加在網址上。
所以若要傳送有安全性考量的參數時,就不適合使用GET來傳送。
實際範例:php-example-6-3.php
傳遞表單複選欄位值:
若使用$_GET[“欄位名稱”]或$_POST[“欄位名稱”]來接收例如像:Select複選欄位,會發現都只能接收到複選欄位的最後一個值。
為甚麼呢??原因很簡單,因為Select複選欄位的選項名稱都一樣,所以當我們使用$_GET或$_POST時,後面參數值都會將前面的值覆蓋掉,所以當我們要使用Select複選欄位時,必須將Select的名稱設為陣列(在第四章資料型別有簡單提過)。
錯誤範例:
這個範例的Select name是一個普通的變數,只能存入單一變數值。
<select name=”S_name” size=”3″ multiple>
<option value=”Aidec”>Aidec</option>
<option value=”Eric”>Eric</option>
<option value=”john”>john</option>
</select>
正確範例:
這個範例的Select name是一個陣列,可存入多個變數值。
<select name=”S_name[]” size=”3″ multiple>
<option value=”Aidec”>Aidec</option>
<option value=”Eric”>Eric</option>
<option value=”john”>john</option>
</select>
接收方法:
<?php
foreach ($_POST[“S_name”] as $arr_name) {
echo $arr_name.'<br>’;
}
?>
說明:
使用foreach迴圈 將 $_POST[“S_name”]的值,存入 $arr_name 內,並顯示在螢幕上。
感謝您的閱讀,請用力地分享讓大家知道吧~~
1 2
很抱歉,此文章關閉留言