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[“欄位名稱”]接收欄位的值。

 

註:$_GET 和 $_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

Aidec Li
學我所見,寫我所學。凡事略懂略懂~~
更多 Aidec Li 的文章...

很抱歉,此文章關閉留言