---
# System prepended metadata

title: PHP - 網頁傳值 GET 和 POST
tags: [PHP]

---

###### tags: `PHP`
# PHP - 網頁傳值 GET 和 POST
- 22/5/14
- github參考資料 : GET/POST/BMI計算
  https://github.com/POPOB2/PHP_Notes/tree/main/form%E8%A1%A8%E5%96%AE
# 網頁傳值


  利用表單或連結傳遞網頁資料到其他頁面
  
  例:google搜尋關鍵字>搜尋>轉移到別的頁面
    這個轉移的頁面 必須能接收傳過來的關鍵字 再呈現搜尋結果

- 傳值
   * 檔案間 (一對一,A檔案跟B檔案,B檔案跟A檔案) 的傳值>GET or POST
   * 全域傳值(變數)只要設一個變數,所有ABC檔案都可以傳遞 > Cookie or Session
   * Cookie 存在於客戶端
   * Seesion 存在於伺服器端
- 目前所有瀏覽器只支援兩種傳遞資料的表單方式(form表單)
   1. GET 
      (只拿東西 只看東西 不改變內容)
   
   2. POST 
      (新增一個訊息的動作稱之為POST)
      (POST=就是要對伺服器進行 新增 查詢 修改 的動作)
 
- GET
  GET的樣式傳遞的資訊(狀態)
  因網址上顯示了狀態資訊,稱之為明碼
  通常放在網址上的資料,會放比較沒有隱私性問題的資料, 如: 搜尋的資料 編輯動作等
   <pre>
   <font color=#FF0000>網址中 ? 之後的東西 即 傳值的內容</font>
   <font color=#00C1FF>%% 包覆的數值即 中文字, server將中文字轉為編碼</font>
   <font color=#01FF00>action=edit 顯示user想使用 編輯的動作</font>
   
   http://zh.wikipedia.org/w/index.php<font color=#FF0000> ? </font><font color=#00C1FF>%E6%97%A0%E7%8A</font>&<font color=#01FF00>action=edit</font>......
   
   </pre>
   
    * 明碼,顯示在網址上
    * 適合較為隱私的資料
    * 可直接放在<font color=#FF0000>網址</font>上傳遞(query string)
      (放在<font color=#FF0000>網址</font>上傳遞,意味可用連結傳遞(a標籤),相當於在表單中用GET做傳送)
    * 資料長度較短 ~~( 最長約2K, 約200多中文字 )~~
    * 類似明信件的概念,寄送地址和訊息都是公開的
- POST
  
    * 經過編碼傳輸,不會顯示在網址上
    * 資料長度較長 ~~(最長約4K 適用於上傳檔案 圖片 較長的文章等 )~~
    * 可透過<font color=#FF0000>表單</font>方式傳送資料
      (POST無法像GET用連結傳送)
    * 類似信封寄信的概念,信封上只有傳遞的地址及收件人名稱,但訊息的內容放在信封內,不會被一般人看見(編碼/包裝)




# 畫面表單的東西 跟做計算運算的檔案 分開 
1. 分工 提升效率
2. 邏輯清楚
3. 減少網頁上的判斷

# API=獨立程式
  API把送過來的請求(Request) 初步分析 用分析結果>產生行為>把行為結果 回傳給發出請求方

- GET POST 同時傳值 通常只會其中有一個陣列有內容
  使用者傳遞過來的東西 不是GET 就是POST
  所以使用者傳過來的東西 我只要判斷GET或POST 只要有一個是空值  另一個就是有值的
  可以用這個方式來判斷用哪一個方式來接收變數
  
  可以讓程式更進階
  從只能接收GET或接收POST
  變成可以同時接收GET或接收POST
  功能上會有比較多的程式應用
  
  基於以上 根據陣列內容 有 或 沒有 來判斷
  * empty 用於判斷 有沒有值 或是 值是不是0
    數字0 在empty函式中 被視為是空值 所以empty無法判斷0的狀況
    empty被用於判斷陣列是否是空的
     
     
  * 如果GET是空的 意味傳過來的資料是POST 就用POST的資料接收
    如果GET不是空的 意味傳過來的資料是GET 就用GET的資料接收
 
# 何謂 狀態/狀態管理

- 狀態= 每個$變數 / 是否用GET或POST 等
  參數一多 就會亂 整理使其正常運行 即 狀態管理
  狀態管理較多集中於前端的東西
  
# 前端與後端的差別
  F12檢視程式碼的時候
  前端使用JS的計算公式可以被USER看見
  後端使用PHP的計算公式不會被USER看見

  早期的系統>導回獨立頁面>過個幾秒 導回LOGIN頁面 (較早期的資安觀念)
  
  後期作法 看重 使用者體驗 避免停留在不必要的頁面 另外停留在獨立頁面上反而容易成為駭客攻擊的目標
  
  現在:一開始login頁面>如果正確就導到正確的頁面
