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