--- title: 進階課程 tags: PHP基礎課程 --- isset跟empty的不同 === * isset() 檢查的變數存不存在 * empty() 檢查的變數內的值是否為空 | | isset() | empty() | | -------- | -------- | -------- | | $x is undefined | FALSE | TRUE | | $x = null; | FALSE | TRUE | | $x = 0; | TRUE | TRUE | | $x = "0"; | TRUE | TRUE | | $x = 1; | TRUE | FALSE | | $x = ""; | TRUE | TRUE | | $x = "PHP"; | TRUE | FALSE | 傳值 === 檔案間的傳值 - --- 提供個別網頁傳遞 傳遞動作只有一次 1. GET * 明碼,會顯示在網址上 * 適合較無隱私的資料 * 可直接放在網址中傳遞(query string) * 資料長度較短 * 類似明信片的概念,寄送地址和訊息都是公開的 ```php= <form action='book' method='GET'> <input type='text' name='cat' value=''> <input type='submit' value='送出'> </form> ``` 上方程式碼在網址會這樣顯示 ![](https://i.imgur.com/l1hH9JZ.png) 2. POST * 經過編碼傳輸,不會顯示在網址上 * 資料長度較長 * 可透過表單方式傳送資料=>最不一樣的地方 * 類似信封寄信的概念 信封上只有傳遞的地址及收件人名稱 但訊息的內容放在信封內,不會被一般人看見。 ```php= <form action='api/get/book/1' method='POST'> <input type='text' name='book' value=''> <input type='submit' value='送出'> </form> ``` 上方程式碼在網址會這樣顯示 ![](https://i.imgur.com/gKBB9Wt.png) 必須在F12才能看到值 全域傳值 變數 - ---- 為了解決在多個頁面間傳值的麻煩 1. cookie-存瀏覽器 * 客戶端儲存 * 可設定過期時間 * 有長度和數量限制(視瀏灠器) * 安全性較低(有保密模式) * 客戶端可禁用或刪除 * cookie登入 * name=key John=值 time=登入時間 ```php= setcookie("name", "John" , time()+3600, "/"); ``` * cookie登出 * 如要登出把時間改成負數即可 ```php= setcookie("login","",time()-1); ``` --- 2. session-存伺服器 * 伺服器端儲存 * 多元儲存方式 * 可搭配Cookie使用 * 儲存長度較長 * 安全性較高 * 必須設定session start以後才能使用 ```php= session_start(); ``` * session登入 * name=key John=值 time=登入時間 ```php= setcookie("name", "John" , time()+3600, "/"); ``` * session登出 * 如要登出把時間改成負數即可 ```php= unset($SESSION['login']); ``` * 網址的抓取 假設我們的網址是 http://www.wibibi.com/test.php?tid=333 則以上 $_SERVER 分別顯示結果會是 echo $_SERVER['HTTP_HOST']; //顯示 www.wibibi.com echo $_SERVER['REQUEST_URI']; //顯示 /test.php?tid=222 echo $_SERVER['PHP_SELF']; //顯示 /test.php echo $_SERVER['QUERY_STRING']; //顯示 tid=222