目前的網站通常不會是只有單一靜態頁面,為了增加網站的互動性和功能性,我們會透過表單或連結來傳遞資料到其他頁面去,這個步驟就是在進行網頁傳值。
比如我們在google.com的搜尋欄輸入關鍵字,按下搜尋後,會轉移到別的頁面去,而這個轉移後的頁面必須能接收傳過來的關鍵字,最後把搜尋的結果呈現在頁面上。
目前表單功能只支援兩種傳遞資料的方式:
- GET
- POST
GET
- 明碼,會顯示在網址上
- 適合較無隱私的資料
- 可直接放在網址中傳遞(query string)
- 資料長度較短
- 類似明信片的概念,寄送地址和訊息都是公開的
POST
- 經過編碼傳輸,不會顯示在網址上
- 資料長度較長
- 可透過表單方式傳送資料
- 類似信封寄信的概念,信封上只有傳遞的地址及收件人名稱,但訊息的內容放在信封內,不會被一般人看見。
表單元件
使用網頁表單元件時,需要註明要傳送的目的地及使用的傳送方式:
- 使用 GET 傳送
1 | <form action='api/get/book/1' method='GET'> |
- 使用 POST 傳送
1 | <form action='api/get/book/1' method='POST'> |
- 使用 POST 傳送,並且有檔案上傳
1 | <form action='api/get/book/1' method='POST' enctype='multipart/form-data'> |
PHP檔頭管理指令-header()
header指令可以在檔案轉送時在檔頭加入一些資訊供接收方使用,我們常用的其中一項是用來指定檔案要轉送的位址或頁面:
1 |
|
使用location時,等同於是對目標檔案發出一個請求,因此可以在連結目標後加上查詢參數,以get的方式來送出請求
1 | //從目前的檔案A,轉移至檔案B,並帶上一個error的參數,參數內容為fail |
isset() vs empty()
在處理網頁間傳值時,我們經常會需要先判斷是否有傳值發生或是否存在特定內容,再進一步做處理,isset()及empty()可做為初步判斷之用,但需注意其使用上的差異。
isset() - 判斷變數是否已被宣告,或已宣告,但值不為null
empty() - 判斷變數的值是否為空的,0也會被判斷為空,未宣告也會被判斷為空
以下為簡易的函數差異對照表:
變數 | 值型態 | isset() | empty() | is_null() | boolean:if($x) |
---|---|---|---|---|---|
$x=””; | string | TRUE | TRUE | FALSE | FALSE |
$x=null; | NULL | FALSE | TRUE | TRUE | FALSE |
var $c; | NULL | FALSE | TRUE | TRUE | FALSE |
$x is undefined | NULL | FALSE | TRUE | TRUE | FALSE |
$x=array(); | array | TRUE | TRUE | FALSE | FALSE |
$x=array(‘a’,’b’); | array | TRUE | FALSE | FALSE | TRUE |
$x=false; | boolean | TRUE | TRUE | FALSE | FALSE |
$x=true; | boolean | TRUE | FALSE | FALSE | TRUE |
$x=1; | integer | TRUE | FALSE | FALSE | TRUE |
$x=42; | integer | TRUE | FALSE | FALSE | TRUE |
$x=0; | integer | TRUE | TRUE | FALSE | FALSE |
$x=-1; | integer | TRUE | FALSE | FALSE | TRUE |
$x=”1”; | string | TRUE | FALSE | FALSE | TRUE |
$x=”0”; | string | TRUE | TRUE | FALSE | FALSE |
$x=”-1”; | string | TRUE | FALSE | FALSE | TRUE |
$x=”php”; | string | TRUE | FALSE | FALSE | TRUE |
$x=”true”; | string | TRUE | FALSE | FALSE | TRUE |
$x=”false”; | string | TRUE | FALSE | FALSE | TRUE |
網頁傳值練習
BMI 計算
- 建立一個可以輸入
身高
和體重
的表單畫面 - 按下
"計算BMI"
按鈕後,在另一個頁面顯示BMI值
登入檢查
- 建立一個可以輸入帳號和密碼的表單畫面
- 輸入帳號密碼,按下
"登入"
按鈕後,在另一個頁面顯示帳號密碼是否正確。
設計一個網頁版萬年曆,只需顯示西元年月日
- 以月為單位來顯示一個月中的日期
- 有上一個月,下一個月的連結來切換月份
- 可以不同的顏色或樣式來強調當日或周末