---
# System prepended metadata

title: 進階課程
tags: [PHP基礎課程]

---

---
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