Jill 筆記
:::
:::
所有書籍
「PHP 從頭說」目錄
MarkDown
4-5 array:$result->fetch_row()
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
5-1 index.php
PHP 從頭說 ======= ### 一、Smarty 顯示所有讀出的資料 1. 顯示所有欄位並增加編輯鈕: ```php {foreach $content as $row}
{$row.done}
{$row.title}
{$row.end}
{$row.priority}
{$row.assign}
{$row.create_time}
編輯
{/foreach} ``` 2. 使用標籤判斷是否完成: ```php
{if $row.done}
{else}
{/if}
``` ### 二、編輯(更新)資料 1. 編輯(更新)資料的SQL語法: ```markup update 資料表 set 欄位1=值1,欄位2=值2,... [where 篩選條件] [limit 筆數] ``` 2. 一定要有where,否則的話,會所有欄位全部被更新! 3. 編輯功能的步驟 - 按下編輯連結時,將欲修改的資料流水號傳給程式(請用get方式傳遞參數)。 ```markup
編輯
``` - 程式接收後,判斷若有接收到流水號,則為編輯模式,否則為新增模式。 ```php // 表單函數 function post_form() { global $db, $smarty; if (isset($_GET['sn'])) { // 過濾 $sn = (int) $_GET['sn']; // 去資料庫撈一筆 $sql = "select * from `list` where `sn`='{$sn}'"; $result = $db->query($sql); // 執行失敗秀出訊息 if (!$result) { throw new Exception($db->error); } // 讀出資料 $content = $result->fetch_assoc(); //過濾變數 $content['title'] = filter_var($content['title'], FILTER_SANITIZE_SPECIAL_CHARS); $content['directions'] = htmlspecialchars($content['directions'], ENT_QUOTES); $content['priority'] = filter_var($content['priority'], FILTER_SANITIZE_SPECIAL_CHARS); $next_op = 'update'; } else { // 加入預設值 $content = [ 'sn' => '', 'title' => '', 'directions' => '', 'end' => date("Y-m-d", strtotime("+10 day")), 'priority' => '中', 'assign' => '', 'assign_arr' => [], 'done' => 1, ]; $next_op = 'add'; } $smarty->assign('next_op', $next_op); $smarty->assign('content', $content); } ``` - 複選框須使用PHP字串切割函數:`explode('分割符號',字串變數);` ```php // 表單函數 function post_form() { global $db, $smarty; /********** 省略*************/ //複選框 $content['assign_arr'] = explode(";", $assign); } ``` - 同時修改樣板檔 `post_form.tpl` ```markup
李大頭
吳大大
郭大大
``` - 用隱藏欄位來存放模式狀態,以利送出時程式判斷該新增或更新,name通常為next\_op,記得加入 `sn` 編號。 ```markup
``` - 執行更新動作 - 新增一組`case 'update' `: ```php case 'update': $sn = update(); header("location: index.php?sn={$sn}"); exit; ``` - 執行` update()` ```php //更新清單 function update() { global $db; //過濾變數 $sn = (int) $_POST['sn']; $title = $db->real_escape_string($_POST['title']); $directions = $db->real_escape_string($_POST['directions']); $end = $db->real_escape_string($_POST['end']); $priority = $db->real_escape_string($_POST['priority']); $assign = $db->real_escape_string(implode(';', $_POST['assign'])); $done = (int) $_POST['done']; $update_time = date('Y-m-d H:i:s'); // 連線資料庫 $sql = "UPDATE `list` SET `title`='{$title}', `directions`='{$directions}', `end`='{$end}', `priority`='{$priority}', `assign`='{$assign}', `done`='{$done}', `update_time`='{$update_time}' WHERE `sn`= '$sn'"; // die($sql); if (!$db->query($sql)) { throw new Exception($db->error); } return $sn; } ``` ### 三、顯示單筆資料 1. 建立 find\_one()。 ```php // 列出單筆資料 function find_one($sn) { global $db; // 去資料庫撈一筆 $sql = "select * from `list` where `sn`='{$sn}'"; $result = $db->query($sql); // 執行失敗秀出訊息 if (!$result) { throw new Exception($db->error); } // 讀出資料 $content = $result->fetch_assoc(); //過濾變數 $content['title'] = filter_var($content['title'], FILTER_SANITIZE_SPECIAL_CHARS); $content['directions'] = htmlspecialchars($content['directions'], ENT_QUOTES); $content['priority'] = filter_var($content['priority'], FILTER_SANITIZE_SPECIAL_CHARS); $content['assign_arr'] = explode(";", $content['assign']); return $content; } ``` 2. 修改表單函數。 ```php // 表單函數 function post_form() { global $db, $smarty; if (isset($_GET['sn'])) { // 過濾 $sn = (int) $_GET['sn']; $content = find_one($sn); $next_op = 'update'; } else { /****省略**/ } $smarty->assign('next_op', $next_op); $smarty->assign('content', $content); } ``` 3. 流程加入編號判斷 ```php //index.php /********************流程判斷*********************/ // 變數過濾 /****省略******/ $sn = isset($_REQUEST['sn']) ? (int) $_REQUEST['sn'] : ""; switch ($op) { /****省略******/ default: if (empty($sn)) { //列出所有事項 list_all(); } else { $content = find_one($sn); $smarty->assign('content', $content); $op = 'show_one'; } break; } ``` 4. `templates/index.tpl` ```markup {elseif $op=='show_one'} {include file="show_one.tpl"} ``` 5. `templates/show_one.tpl` ```markup
{$content.title}
是否完成: {if $content.done}
{else}
{/if}
描述
{$content.directions|nl2br}
到期日
{$content.end}
優先順序
{$content.priority}
指派對象
{$content.assign}
建立時間
{$content.create_time}
最後更新時間
{$content.update_time}
編輯
回首頁
``` ### 四、刪除事項 1. 加入刪除按鈕 - 修改 templates\\index.tpl,在編輯隔壁加入刪除功能 ```markup
刪除
``` - 在單一事項頁面也記得加,修改 templates\\show\_one.tpl,一樣加在編輯的隔壁 ```markup
刪除
``` 2. 加入刪除流程:修改 index.php 的流程,加入一組刪除的流程 ```php //刪除資料 case 'delete': del($sn); header("location: index.php"); exit; ``` 3. 刪除的SQL語法: ```markup delete from `資料表名稱` [where 篩選條件] [limit 筆數] ``` 4. 新增刪除函數:加入del() ```markup function del($sn) { global $db; $sql = "DELETE FROM `list` WHERE `sn`='{$sn}'"; if (!$db->query($sql)) { throw new Exception($db->error); } } ```