###### 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頁面>如果正確就導到正確的頁面