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觀察有無新增成功