Jill 筆記
:::
:::
所有書籍
「PHP從入門到放棄實戰班」目錄
MarkDown
7-5 index.php
1. 實戰之前
1-1 安裝開發環境
1-2 上課範例
2. HTML基礎
2-1 index.html
3. BootStrap響應式框架
3-1 格線系統
3-2 表格
3-3 導覽列
3-4 表單
4. PHP基本語法
4-1 註解
4-2 PHP資訊頁
4-3 PHP變數與陣列
4-4 各種訊息整理
5. 套用Smarty樣板
5-1 使用 Smarty
5-2 index.php
5-3 templates/index.tpl
5-4 php二維陣列
6. 資料庫規劃
6-1 MySQL常用資料類型一覽
6-2 讓PHP7連線到MySQL資料庫
7. PHP程式整併與樣板流程判斷
7-1 PHP條件判斷
7-2 PHP的變數過濾
7-3 練習自訂函數
7-4 templates/index.tpl
7-5 index.php
8. 製作表單並寫入資料到資料庫
8-1 index.php
8-2 post_form.tpl
8-2-1 post_form.tpl
8-3 templates/index.tpl
8-4 footer.php
9. 資料庫讀取
9-1 幾個常用的迴圈用法
9-2 讀出資料的安全性過濾並顯示
9-3 想想寫入還有什麼問題?
9-4 templates/post_form.tpl
9-5 index.php
9-6 templates/index.tpl
10. 編輯表單、刪除資料
10-1 顯示單筆資料
10-2 刪除事項
10-3 index.php
10-4 templates/post_form.tpl
10-5 templates/index.tpl
10-6 templates/show_one.tpl
11. 其他細節處理(補充)
11-1 小月曆
11-2 加入所見即所得編輯器
11-3 表單驗證
11-4 分頁功能
12. 練習
8-1 index.php
PHP從入門到放棄實戰班 ============ ### 一、 製作表單頁面(3-4) 1. 基本語法: ```markup
表單元件
``` 2. 在 Visual Studio Code 中輸入`b4-form-grid`按
Enter
可以快速產生一整組表單語法。 3. 貼上3-4節程式碼另存成 `post_form.tpl` ```markup
待辦事項
描述
到期日
優先順序
高
中
低
爸爸
媽媽
哥哥
妹妹
我
完成
未完成
儲存
``` ### 二、表單函數 1. `index.php` 新增表單函數: ```php // 表單 function post_form() { global $content, $db, $smarty; // 加入預設值 $content = [ 'title' => '', 'directions' => '', 'end' => date("Y-m-d", strtotime("+10 day")), 'priority' => '中', 'assign' => [], 'done' => 1, ]; $next_op = 'insert_list'; $smarty->assign('next_op', $next_op); } ``` 2. post\_form.tpl(詳細8-2) - `
` ,如: ```markup
``` - 大量文字框:`
預設值
` ,如: ```markup
{$content.directions}
``` - 下拉選單:`
選項
` ,如: ```markup
高
中
低
``` - 單選框:`
選項文字 1`,如: ```markup
完成 ``` - 複選框:`
選項文字 1`,如: ```markup
爸爸 ``` - 隱藏框與送出表單 ```markup
``` ### 三、 寫入資料到資料庫 1. 要操作MySQL,必須用SQL語言,新增資料的SQL語法如下(大小寫無關): ```php INSERT [INTO] `資料表名稱` [(`欄位1`, `欄位2`...)] VALUES ('值1', '值2'...) ``` 2. 建議凡是資料庫名稱、資料表名稱、欄位名稱都用重音符號```包起來。 3. 凡是「值」的,都用單引號`'`包起來。 4. 利用 $db->real\_escape\_string() 過濾資料,目的是順利讓所有資料存入資料庫,並避免隱碼攻擊。 ```php $title = $db->real_escape_string($_POST['title']); ``` 5. `$db->query($sql)` 就是送執行指令到資料庫。 6. `$db->error` 會秀出資料庫傳回來的錯誤訊息。 7. 取得寫入時該資料產生的流水號:`$db->insert_id` 8. 程式碼: ```php //新增清單 function add() { global $db; //過濾變數 $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 = intval($_POST['done']); // 連線資料庫 $sql = "INSERT INTO `list` ( `title`, `directions`, `end`, `priority`, `assign`, `done`,`create_time`,`update_time`) VALUES ('{$title}', '{$directions}', '{$end}', '{$priority}', '{$assign}', '{$done}',now(),now())"; if (!$db->query($sql)) { throw new Exception($db->error); } $sn = $db->insert_id; return $sn; } ``` ### 四、寫入後須轉向 1. 凡是寫入、修改、刪除,進行完都應該做轉向,避免使用者重新整理畫面,又重複執行寫入、修改或刪除:`header("location: index.php?sn={$sn}");` 2. `header()`函數基本上是設定文件檔頭,其中 location屬性可以指定文件轉向,故利用之來達成轉向功能。 3. 程式碼: ```php if (isset($_POST['send'])) { if (isset($_POST['next_op'])) { if ($_POST['next_op'] == "add") { $sn = add(); $_message = empty($sn) ? "新增失敗" : "新增成功!"; } } header("location: index.php?sn={$sn}"); } ``` ###