:::
8-2 新增使用者到資料庫
一、加入註冊流程
- 由於註冊表單的 action 是指向到 index.php,也就是註冊會在 index.php中處理。
- 由於有送一個 $op='save_regist' 到 index.php,所以,在 index.php 的 switch 中加入一組對應。
case "save_regist": save_regist(); header("location:{$_SERVER['PHP_SELF']}"); exit; -
也就是註冊動作交由 save_regist() 函數來處理
-
註冊完,記得轉向,避免一直保留在「正在註冊的狀態」,若是沒轉向,只要一重新整理,資料庫便會多出一筆一樣的資料。
二、insert 語法
- 新增資料的SQL語法如下:
insert [into] 資料表名稱 [(欄位1,欄位2...)] values (值1,值2...)
- 中括號的部份代表可以省略。
三、完成註冊函數
- 寫入前需先連上資料庫,故呼叫 link_db() 連上資料庫後,把連線控制器存到 $db 中以便後續使用。
- 由於需要config.php中的值,所以,記得把引入config.php的語法拉到網頁最上方,順便引入 function.php 共同函數檔。
<?php session_start(); require_once "config.php"; require_once "function.php"; require_once 'smarty/libs/Smarty.class.php'; $smarty = new Smarty; $db = link_db();
- 為了讓 config.php 中的 $admin_id 變數以及 $db 資料庫物件可以在函數中使用,我們用 global 宣告該變數為全域變數。
- 利用 $db->real_escape_string() 過濾資料,目的是順利讓所有資料存入資料庫,並避免隱碼攻擊。
//新增使用者 function save_regist() { global $admin_id, $db; $name = $db->real_escape_string($_POST['name']); $email = $db->real_escape_string($_POST['email']); $pass = $db->real_escape_string($_POST['pass']); $group = $name == $admin_id ? 'admin' : 'user'; $sql = "INSERT INTO `users` ( `name`, `email`, `pass`, `group`) VALUES ('{$name}', '{$email}', '{$pass}', '{$group}')"; $db->query($sql) or die($db->error); $uid = $db->insert_id; return $uid; } - $db->query($sql) 就是送執行指令到資料庫。
- $db->error 會秀出資料庫傳回來的錯誤訊息
- 其中 $group 群組判斷,我們根據 config.php 中的管理員帳號設定$admin_id來比對姓名,如果輸入的姓名也是 tad 的,就判為管理員admin,其餘為user(當然,這不是好的作法,改成用Email判斷會更好。)
四、練習
- 新增幾個使用者試試
- 利用adminer觀察有無新增成功
8-1 連上資料庫