Jill 筆記
:::
:::
所有書籍
「PHP 從頭說」目錄
MarkDown
2-4 index.tpl
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
3-1 index.php
PHP 從頭說 ======= ### 一、資料庫規劃 1. 點擊MySQL的Admin叫出phpMyAdmin,或直接輸入網址:「http://localhost/phpmyadmin/」亦可。 2. 點擊左側選單中「新增」,於右側「建立新資料庫」,如「`todo`」,「校對」選擇「`utf8mb4_general_ci`」。 3. 建立需要的資料表,例如「list」資料表,欄位數 9 。 4. 接著建立以下資料表:
列
類型
註解
sn
mediumint(8) 自動遞增
流水號
title
varchar(255)
待辦事項
directions
text
描述
end
date
到期日
priority
enum('高','中','低')
優先順序
assign
varchar(255)
指派對象
done
enum('0','1')
是否完成
create\_time
datetime
建立時間
update\_time
datetime
最後更新時間
5. 注意,一定要有流水號(勾選AI,即自動遞增) ![](http://tnjaile.com/uploads/tad_book3/image/php01.png) 6. 利用【預覽 SQL】存下 SQL 語法 ```sql CREATE TABLE `todo`.`list` ( `sn` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '流水號' , `title` VARCHAR(255) NOT NULL COMMENT '待辦事項' , `directions` TEXT NOT NULL COMMENT '描述' , `end` DATE NOT NULL COMMENT '到期日' , `priority` ENUM('高','中','低') NOT NULL COMMENT '優先順序' , `assign` VARCHAR(100) NOT NULL COMMENT '指派對象' , `done` ENUM('1','0') NOT NULL COMMENT '是否完成' , `create_time` DATETIME NOT NULL COMMENT '建立時間' , `update_time` DATETIME NOT NULL COMMENT '最後更新時間' , PRIMARY KEY (`sn`) ) ENGINE = MyISAM DEFAULT CHARSET=utf8mb4; ``` ### 二、讓PHP8連線到MySQL資料庫 1. 設定資料庫密碼 - 在 phpMyAdmin 介面選到使用者帳號的地方,會看到帳號的部分有 `%` 的帳號,先把這帳號給刪掉,這帳號表示資料庫可以匿名登入,這非常不安全請一定要刪除。 - 點選 root 的編輯權限,接著點擊修改密碼 ![](http://tnjaile.com/uploads/tad_book3/image/php02.png) ![](http://tnjaile.com/uploads/tad_book3/image/php03.png) - 到 D:\\xampp\\phpMyAdmin 開啟 `config.inc.php`,在 password 後面輸入你剛剛所設定的密碼,將19行的值改為`http`,如此,登入phpMyAdmin時就會詢問帳號密碼。 2. PHP常數設定 - 常數是一旦設定就不會變,和變數可以隨時指派其值不一樣。 - 常數可以直接在函數中使用。 - 一般常數會以大寫前面加底線來辨識(實際上,不加底線或是用小寫也是可以)。 - 常數定義方式: ```php define('常數名稱', '對應值'); ``` - `index.php`: ```php //常數設定 define('_DB_LOCATION', 'localhost'); define('_DB_ID', 'root'); define('_DB_PASS', '12345'); define('_DB_NAME', 'todo'); ``` 3. MySQL資料庫連線方法: - https://www.php.net/manual/en/mysqli.quickstart.connections.php - 程式碼( `index.php` ) ```php //實體化資料庫物件 $mysqli = new mysqli(_DB_LOCATION, _DB_ID, _DB_PASS, _DB_NAME); if ($mysqli->connect_error) { throw new Exception('無法連上資料庫:' . $mysqli->connect_error); } $mysqli->set_charset("utf8mb4"); ``` - 指定欲連線的來源位置(一般為localhost),資料庫帳號、密碼及資料庫名稱。 - 若無錯誤訊息,表示連線成功。連線後,需設定用`utf8mb4`編碼來擷取資料。 - 練習:將資料庫連線加到 `header.php` 。 ### 三、PHP函數 1. 函數有兩種,一組是PHP內建函數,另一種是自訂的函數。 2. 一個函數通常都有其獨特的功能,可視為具特定功能的小零件,直接呼叫使用即可,如: `phpinfo() `,有些有傳回值,有些沒有;有些需要輸入參數,有些不用。 3. 完整函數手冊:
4. 函數基本結構:傳回值 函數名稱(參數1,參數2...); 5. 函數傳回值有:string(字串)、int(整數)、array(陣列)、object(物件)、bool(布林值)、void(無傳回值)、mixed(不一定)、new(建立物件) 6. 練習內建函數:顯示今日日期 (找手冊)。 ### 四、PHP自訂函數 1. 自訂函數的基本語法為: ```php function 函數名稱($參數1='預設值' , $參數2='預設值',...){ global $外面的變數1, $外面的變數2; //函數內容,任何有效的 PHP 程式碼,包括其它函數和class定義 ; return 傳回值; } ``` 2. 參數不見得要有,傳回值也不一定要有。 3. 函數可放在檔案中任何地方,放在呼叫之前或之後都沒關係。使用時,呼叫函數名稱即可。 4. 建立一個function.php檔案,若同一個函數會被兩個以上的檔案呼叫時,即可把該函數放到此檔,以便讓其他檔案共用,例如可以把連線資料庫寫成函數試試。 - function.php: ```php function link_db() { //實體化資料庫物件 $mysqli = new mysqli(_DB_LOCATION, _DB_ID, _DB_PASS, _DB_NAME); if ($mysqli->connect_error) { throw new Exception('無法連上資料庫:' . $mysqli->connect_error); } $mysqli->set_charset("utf8mb4"); return $mysqli; } ``` - header.php: ```php // 引入function.php require_once 'function.php'; ``` 5. 超級全域變數可直接在函數中使用,外面的一般變數無法進到函數中,除非做成參數或是用 `global `宣告。當然,函數裡面的變數外面也無法取用,除非 `return `出去。 - 常見超級全域變數 - 以「陣列」方式存在,超級全域變數可在任何地方被拿來使用(包括函數內)。 - $\_GET、$\_POST、$\_REQUEST:來自表單的變數。 - $\_SERVER:環境變數,$\_SERVER\['PHP\_SELF'\]取得目前網址。 - $\_COOKIE:給cookie用的全域變數,cookie是存在使用者電腦的一個小檔案 - $\_SESSION:給session的全域變數,session是存在伺服器中的一個小檔案 - $\_FILES:上傳檔案時會用到的超級全域變數。 - 在`footer.php` 加入: ```php // 取得目前網址 $smarty->assign('action', $_SERVER['PHP_SELF']); ``` ### 五、Smarty 條件判斷 1. 基本語法: ```markup {if 判斷條件} //條件為真執行 {elseif 判斷條件} //elseif 的條件為真執行 {else} //條件為假時執行 {/if} ``` 2. index.tpl : ```markup {if $content}
是否完成
標題
到期日
優先順序
指派對象
{foreach $content as $c}
{$c.done}
{$c.directions}
{$c.end}
{$c.priority}
{$c.assign}
{/foreach}
{else}
新增待辦事項
{/if} ``` ### 六、PHP 條件判斷 1. 三元運算式: - 條件 ? 真動作一 :假動作二 ```php $op = isset($_REQUEST['op']) ? $_REQUEST['op'] : ""; ``` - 練習:將 `op` 送到 `index.tpl` 樣板檔,並判斷 `op=='post_form'` 切換到樣板檔 `post_form.tpl` 2. if 的用法: ```php if(判斷條件){ //條件為真執行 }elseif(判斷條件){ //elseif的條件為真執行 }else{ //條件為假時執行 } ``` - 由上往下判斷,一旦為真,就執行指定動作。後面就不再繼續判斷。 - elseif 和 else 均可省略,視情況使用即可。 - elseif 可以有很多組,其餘的只能有一組。若是太多elseif,建議改用switch - 練習:利用 if 判斷頁面切換,並建立自訂函數 list\_all() 3. switch 用法: - switch 可以判斷某個變數值,當該變數值符合指定條件時,就去執行哪些動作,基本上就是「一個口令,一個動作」之意。 - switch 完整語法為: ```php switch ($變數) { case '特定值': # 動作... break; default: # 動作... break; } ``` - case 到 break 就是完整一組,可以自行添加無限多組。 - break; 不加也符合語法,但會一直執行到下方動作。 - default 則是當變數跟任一個「特定值」都不相符時要進行的動作。 - 練習:請利用 $op 來完成 switch 迴圈。 4. match 用法 ( PHP8 新增): - 優點:https://iter01.com/576346.html - 改寫switch ```php match ($op) { 'post_form'=> $content='新增表單', default=> list_all(), }; ``` ### 七、 製作表單 post\_form.tpl 1.
選擇【水平表單】貼到 `post_form.tpl` 並修改所需欄位 ```markup
Email
``` 2. 基本語法: ```markup
表單元件
``` 3. 基礎的input 表單元件 - `
` - 常用有: `text `(文字框)、 `hidden `(隱藏框)、 `password `(密碼框)、 `file `(上傳) - 其中的 `name `最重要!一定要有!因為 `name `送出後,會變成 PHP 的變數名稱。 4. 其他常用的表單元件 HTML 語法及屬性 - 大量文字框: `
預設值
` - 下拉選單: `
選項
` - (1) 選項: `
選項文字
` - (2) 若要預設選取:要在<option>中加入 `selected="selected" ` - (3) 若希望下拉選單可以複選,除了 name 要加上 `[] `外,還要加上 `multiple `屬性。 - 單選框: `
選項文字 1 ` - (1) 單選框通常會有好幾個選項,一組選項就要一組 `
`,name 都要一樣才行! - (2) 若要預設選取,要加上 ` checked="checked" ` - 複選框: `
選項文字 1 ` - (1) 複選框通常同時會有好幾個選項,一組選項就要一組 `
` - (2) name 都要一樣才行!而且因為是複選,所以 name 要加上 `[] `,如此會送出陣列。 - (3) 若要預設選取,要加上 `checked="checked" ` - 用 `
`可做出按鈕效果 5. input 元件參考 [https://www.w3schools.com/html/html\_form\_input\_types.asp](https://www.w3schools.com/html/html_form_input_types.asp)