Jill 筆記
:::
:::
所有書籍
「PHP 從頭說」目錄
MarkDown
1-1 index.html
1. 安裝PHP開發環境與BootStrap響應式框架
1-1 index.html
2. PHP基本語法 V.S Smarty樣板
2-1 index.html
2-2 index.php
2-3 demo.php
2-4 index.tpl
3. 資料庫規劃與表單製作
3-1 index.php
3-2 header.php
3-3 footer.php
3-4 templates/header.tpl
3-5 template/navbar.tpl
3-6 index.tpl
3-7 function.php
3-8 templates/post_form.tpl
4. 表單函數與資料庫存取
4-1 post_form.tpl
4-2 index.php
4-3 index.tpl
4-4 array($result->fetch_assoc())
4-5 array:$result->fetch_row()
5. 資料的讀取、編輯修改及刪除
5-1 index.php
5-2 header.php
5-3 footer.php
5-4 templates/index.tpl
5-5 templates/show_one.tpl
5-6 templates/post_form.tpl
6. 檢查必填欄位與常用小工具
6-1 index.php
6-2 templates/post_form.tpl
6-3 templates/show_one.tpl
6-4 templates/index.tpl
6-5 templates/sweetalert_delete.tpl
2-1 index.html
PHP 從頭說 ======= ### 一、PHP基本語法 1. PHP基本寫法: ```php
//以下省略 ``` 6. echo是PHP用來**輸出**資料的語言結構(不是函數),常用。 7. 在PHP中,凡是資料類型是字串的都必須用引號包起來,用雙引號或單引號都可以。 8. 每一個PHP語句後要加上「;」結尾。 9. 開啟瀏覽器,在網址列輸入「http://localhost/index.php」或「http://127.0.0.1/index.php」。 ### 二、註解 1. 單行註解:單行註解以「
//
」或「
\#
」開頭,後面接的文字就是註解文字,這種註解只能用在一行的文字上。 ```php "; // 這是c++風格的單行註解 // 這是c++風格的單行註解 echo "當然註解寫在上面也行
"; echo "這是另一種單行註解"; #這是Unix Shell風格的單行註解 ``` 在 VS Code 請按
Ctrl
+
/
即可。 2. 多行註解:用「/\*...\*/」將註解文字包起來 ```php Shift +
Alt
+
A
即可。 ### 三、PHP資訊頁 1. 請建立phpinfo.php ```php
設定項目
建議值
#### date.timezone 主機預設時區,若主機在台灣,請務必設置為「Asia/Taipei」,否則系統抓到的可能會有誤差。
Asia/Taipei
#### display\_errors 是否顯示錯誤訊息?建議開啟!!否則網站變成空白時將很難進行除錯。
On
#### file\_uploads 是否允許檔案上傳。需配合 upload\_max\_filesize, upload\_tmp\_dir, post\_max\_size 等設定。一般而言,上傳上限的設定,大小需求如下:memory\_limit > post\_max\_size > upload\_max\_filesize
On
#### max\_execution\_time 每個程序最大允許執行時間(秒),0 表示沒有限制。這個參數有助於阻止劣質程序無休止的佔用伺服器資源。
150
#### max\_file\_uploads 最多只能傳幾個檔案?請視需求設定之。
300
#### max\_input\_time 每個程序解析輸入資料的最大允許時間(秒)。 -1 表示不限制。
120
#### max\_input\_vars 可接收的變數數量,超過此數量,就無法完全接收表單內容。
5000
#### memory\_limit 一個程序所能夠申請到的記憶體空間 (可以使用 K 和 M 作為單位)。 這有助於防止劣質程序消耗完伺服器上的所有記憶體。如果要取消記憶體限制,則必須將其設為 -1 。
240M
#### post\_max\_size 允許送出的 POST 表單大小。 該值必須大於 upload\_max\_filesize 的值。 如果啟用了記憶體限制,那麼該值應當小於 memory\_limit 指令的值。
220M
#### upload\_max\_filesize 允許上傳的檔案的最大尺寸。
200M
4. 練習:請開啟 `display_errors ` ### 四、PHP變數 1. PHP變數命名原則:以「$」為開頭,第一個字元只能是以英文(a-z或A-Z)或底線(\_),數字是不能當作第一個字元的。 2. 變數名稱是有大小寫之分的,例如$name、$Name和$NAME是完全不一樣的! 3. 盡量使用有意義的變數名稱,$name絕對比$aaa來的好! 4. $def\_password="1234";//把1234字串指派給$def\_password,其中=是「指定運算元」。 5. PHP變數以最後指定的值為主,可以隨時重新指定其值。 ### 五、PHP的資料型態 1. 字串 string:一般文字,一定要有引號。 - 雙引號: 雙引號串中的內容可以被解釋而且替換 ,變數有效,可用{}將變數和文字隔開,例如:echo "Hi {$name}!"; 就會印出「Hi 某某某!」 - 單引號: 單引號串中的內容直接輸出內容 ,變數會失效, echo 'Hi {$name}!'; 就會秀出「Hi {$name}!」 2. 整數 integer:整數可分正負,如100或-100,整數不需加任何引號。 3. 浮點數 float:有內含小數點的數字,浮點數也不需要加任何引號。 4. 布林值 boolean:即true與false,無大小寫之分 - true:非空字串、非0數值 - false:空字串、數字0、NULL 5. 陣列 array(另外說明) 6. 物件 object: 可自行定義物件成員、物件方法等。 7. 資源 resource:通常是一些連接伺服器,或者開啟目錄、開啟檔案的傳回值。 8. 無值 NULL:NULL不分大小寫,不須引號 。 ### 六、PHP陣列 1. 不含鍵值 ```php $userNames=array('李佳玲','吳弘凱'); ``` 2. 含鍵值 - 一維陣列 ```php // 一維陣列 $navbar = ['home' => "回首頁", 'post' => "發布待辦事項"]; // $navbar['home'] = "回首頁"; // $navbar['post'] = "發布待辦事項"; ``` - 二維陣列 ```php // 二維陣列 $content = array( "1" => array('directions' => "撰寫程式", 'end' => "2021/03/20"), //用逗號結尾 "2" => array('directions' => "開會", 'end' => "2021/03/22"), ); // $content[1]['directions'] = "撰寫程式"; // $content[1]['end'] = "2021/03/20"; // $content[2]['directions'] = "開會"; // $content[2]['end'] = "2021/03/22"; // print_r($content); ``` ### 七、各種訊息整理 1. **Notice 訊息不會影響網站運行,只是語法不完整或不夠嚴謹,PHP給您的溫馨提示而已。** 2. **Notice**: Undefined index 用了未定義的索引。
PHP內心OS
:指定的陣列元素找不到啦! 3. **Notice**: Undefined variable: 用了未定義的變數。
PHP內心OS
:根本沒這個變數啦! 4. **Warning訊息是警告訊息,通常會造成部份語法無法運行,但整體網站仍可呈現。** 5. **Warning**: Illegal string offset 'xxx' in ooo 不合法的字串。
PHP內心OS
:有這個空陣列,但沒有xxx。 6. **Warning**: xxx() expects at least 1 parameter, 0 given 缺少參數。
PHP內心OS
:xxx函數至少要一個參數。 7. **Parse error 是解析錯誤訊息,通常是語法不正確,例如少了敘述句結尾分號之類的,網站會整個停擺。** 8. **Parse error**: syntax error, unexpected 解析錯誤,非預期的...。
PHP內心OS
:語法錯誤要檢查。 9. **Fatal error 嚴重錯誤,網站會整個停擺** **Fatal error**: Uncaught --> Smarty: Unable to load template 'file:index.tpl' Smarty無法載入樣板
PHP內心OS
:說好的樣板檔呢?在templates下找不到啦! ### 八、套用Smarty樣板 1. Smarty的官網在:
2. 用composer安裝Smarty,按
Ctrl
+
`
開啟終端機,並貼上: ```bash composer require smarty/smarty ``` 3. 建立四個Smarty需要的目錄,
Ctrl
+
`
在開啟終端機,並貼上: ```bash mkdir templates mkdir templates_c mkdir configs mkdir cache ``` -
templates
:放置原始樣板的目錄(
一定會用到
) - templates\_c:編譯後的樣板目錄(
需可寫入
) - configs:設定目錄(不見得會用到) - cache:樣板快取目錄(
需可寫入
) ### 九、Smarty基本操作 1. 大原則:和外觀有關的東西都放到.html或.tpl中,所需要的資料全由.php提供,簡單範例, `index.php ` 內容 ```php assign('page_title', $page_title); $smarty->assign('header', $header); $smarty->display('index.tpl'); ``` 2. 樣板檔一律放至 templates 目錄中:請將 ` index.php `內的所有 `html` 語法剪下,另存到 `templates/index.tpl `。 3. PHP檔中最常用的就是利用 $smarty->assign('樣板標籤名稱', $變數值); 將變數送至樣板檔。 4. templates/index.tpl 內容: ```markup
{$page_title}
~~~~~~~~~~~~~~~~~~~~~~~~~~以下省略~~~~~~~~~~~~~~~~~~~~
{$header}
``` 5. index.php: ```php assign('page_title', $page_title); $smarty->assign('header', $header); // 呈現在哪個檔案 templates/xxx.tpl $smarty->display('index.tpl'); ``` ### 十、Smarty變數及陣列
傳送內容
PHP檔(\*.php)
Smarty樣板檔(\*.tpl)
一般變數
```php $header = '我的待辦清單'; $smarty->assign('header', $header); ```
```markup {$header} ```
一維陣列
```php $navbar['home'] = "回首頁"; $navbar['post'] = "發布待辦事項"; $smarty->assign('navbar', $navbar); ```
```markup
{$navbar.home}
(current)
{$navbar.post}
```
二維陣列
```php $content[1]['directions'] = "撰寫程式"; $content[1]['end'] = "2021/03/20"; $content[2]['directions'] = "開會"; $content[2]['end'] = "2020/03/22"; $smarty->assign('content', $content); ```
```markup {foreach $content as $c}
{$c.directions}
{$c.end}
{/foreach} ``` 或 ```markup
{$content.1.directions}
{$content.1.end}
{$content.2.directions}
{$content.2.end}
```
### 十一、製作PHP頁首頁尾檔(整併PHP檔) 1. 可以製作header.php及footer.php,把每個檔案都會引入的東西放在裡面。 2. 可用 `require_once() ` 或 ` include_once() `引入。 3. `header.php `頁首檔 ```php "回首頁", 'post' => "發布待辦事項"]; $smarty->assign('navbar', $navbar); ``` 4. `footer.php `頁尾檔 ```php assign('page_title', $page_title); $smarty->assign('header', $header); $smarty->assign('content', $content); // 呈現在哪個檔案 templates/xxx.tpl $smarty->display('index.tpl'); ``` 5. `index.php` ```php array('directions' => "撰寫程式", 'end' => "2021/03/20"), //用逗號結尾 "2" => array('directions' => "開會", 'end' => "2021/03/21"), ); // 引入頁尾 require_once 'footer.php'; ``` ### 十二、 製作樣板頁首檔(整併樣板檔) 1. 可以製作header.tpl及footer.tpl,把每個樣板檔案都會引入的東西放在裡面。 2. 可用 `{include file="header.tpl"}`引入。 - template/header.tpl ```markup
{$page_title}
``` - template/index.tpl ```markup {include file="header.tpl"} ``` 3. 練習引入導覽列 `navbar.tpl`