0%

[PHP] Lesson 1 網頁傳值

目前的網站通常不會是只有單一靜態頁面,為了增加網站的互動性和功能性,我們會透過表單或連結來傳遞資料到其他頁面去,這個步驟就是在進行網頁傳值。
比如我們在google.com的搜尋欄輸入關鍵字,按下搜尋後,會轉移到別的頁面去,而這個轉移後的頁面必須能接收傳過來的關鍵字,最後把搜尋的結果呈現在頁面上。
目前表單功能只支援兩種傳遞資料的方式:

  • GET
  • POST

GET

  • 明碼,會顯示在網址上
  • 適合較無隱私的資料
  • 可直接放在網址中傳遞(query string)
  • 資料長度較短
  • 類似明信片的概念,寄送地址和訊息都是公開的

POST

  • 經過編碼傳輸,不會顯示在網址上
  • 資料長度較長
  • 可透過表單方式傳送資料
  • 類似信封寄信的概念,信封上只有傳遞的地址及收件人名稱,但訊息的內容放在信封內,不會被一般人看見。

表單元件

使用網頁表單元件時,需要註明要傳送的目的地及使用的傳送方式:

  • 使用 GET 傳送
1
2
3
4
<form action='api/get/book/1' method='GET'>
<input type='text' name='book' value=''>
<input type='submit' value='送出'>
</form>
  • 使用 POST 傳送
1
2
3
4
<form action='api/get/book/1' method='POST'>
<input type='text' name='book' value=''>
<input type='submit' value='送出'>
</form>
  • 使用 POST 傳送,並且有檔案上傳
1
2
3
4
<form action='api/get/book/1' method='POST' enctype='multipart/form-data'>
<input type='text' name='book' value=''>
<input type='submit' value='送出'>
</form>

 

PHP檔頭管理指令-header()

header指令可以在檔案轉送時在檔頭加入一些資訊供接收方使用,我們常用的其中一項是用來指定檔案要轉送的位址或頁面:

1
2
3

//從目前的檔案A,轉移至檔案B
header("location:target.php");

使用location時,等同於是對目標檔案發出一個請求,因此可以在連結目標後加上查詢參數,以get的方式來送出請求

1
2
//從目前的檔案A,轉移至檔案B,並帶上一個error的參數,參數內容為fail
header("location:target.php?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值

登入檢查

  • 建立一個可以輸入帳號和密碼的表單畫面
  • 輸入帳號密碼,按下"登入"按鈕後,在另一個頁面顯示帳號密碼是否正確。

設計一個網頁版萬年曆,只需顯示西元年月日

  • 以月為單位來顯示一個月中的日期
  • 有上一個月,下一個月的連結來切換月份
  • 可以不同的顏色或樣式來強調當日或周末