:::

MarkDown

``` ### 二、表單函數 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 ``` - 下拉選單:`` ,如: ```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}"); } ``` ###