:::

8-2 新增使用者到資料庫

一、加入註冊流程

  1. 由於註冊表單的 action 是指向到 index.php,也就是註冊會在 index.php中處理。
  2. 由於有送一個 $op='save_regist' 到 index.php,所以,在 index.php 的 switch 中加入一組對應。
    case "save_regist":
        save_regist();
        header("location:{$_SERVER['PHP_SELF']}");
        exit;
    
  3. 也就是註冊動作交由 save_regist() 函數來處理

  4. 註冊完,記得轉向,避免一直保留在「正在註冊的狀態」,若是沒轉向,只要一重新整理,資料庫便會多出一筆一樣的資料。

二、insert 語法

  1. 新增資料的SQL語法如下:
    insert [into] 資料表名稱 [(欄位1,欄位2...)] values (值1,值2...)
  2. 中括號的部份代表可以省略。

三、完成註冊函數

  1. 寫入前需先連上資料庫,故呼叫 link_db() 連上資料庫後,把連線控制器存到 $db 中以便後續使用。
  2. 由於需要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();
  3. 為了讓 config.php 中的 $admin_id 變數以及 $db 資料庫物件可以在函數中使用,我們用 global 宣告該變數為全域變數。
  4. 利用 $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;
    }
  5. $db->query($sql) 就是送執行指令到資料庫。
  6. $db->error 會秀出資料庫傳回來的錯誤訊息
  7. 其中 $group 群組判斷,我們根據 config.php 中的管理員帳號設定$admin_id來比對姓名,如果輸入的姓名也是 tad 的,就判為管理員admin,其餘為user(當然,這不是好的作法,改成用Email判斷會更好。)

四、練習

  1. 新增幾個使用者試試
  2. 利用adminer觀察有無新增成功

:::

書籍目錄

展開 | 闔起

https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D722

計數器

今天: 499499499
昨天: 2502250225022502
總計: 7442861744286174428617442861744286174428617442861