用戶註冊是 PHP 初學者必學的經典案例,它串聯了表單提交、數據驗證、資料庫操作與安全防護等核心知識點。本文將帶你從零構建一個完整的註冊流程,包含資料庫建立、表單處理與數據入庫實作。
首先在 MySQL 中建立名為 361way 的資料庫,採用 UTF-8 編碼確保中文相容:
mysql> create database 361way character set utf8;
Query OK, 1 row affected (0.00 sec)
創建 tblmember 表,欄位涵蓋姓名、信箱、密碼、生日與性別等基本資料:
CREATE TABLE IF NOT EXISTS `tblmember` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fName` varchar(30) NOT NULL,
`lName` varchar(30) NOT NULL,
`email` varchar(50) NOT NULL,
`password` varchar(60) NOT NULL,
`birthdate` text NOT NULL,
`gender` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
設計說明: 採用 InnoDB 引擎支援事務,ID 從 10 開始預留前 10 筆,字符集統一使用 UTF-8。
前端表單以 POST 方式提交至 register.php,後端核心代碼如下:
<?php
// 建立資料庫連線
mysql_connect("localhost", "root", "123456") or die(mysql_error());
mysql_select_db("361way") or die(mysql_error());
// 獲取表單數據
$fName = $_POST['fName'];
$lName = $_POST['lName'];
$email = $_POST['email'];
$reemail = $_POST['reemail'];
$password = sha1($_POST['password']); // 簡單哈希,實際建議用 password_hash()
$month = $_POST['month'];
$day = $_POST['day'];
$year = $_POST['year'];
$gender = $_POST['optionsRadios'];
$birthdate = $year . '-' . $month . '-' . $day;
// 寫入資料庫
$query = "INSERT INTO tblmember (id, fName, lName, email, password, birthdate, gender)
VALUES (NULL, '{$fName}', '{$lName}', '{$email}', '{$password}', '{$birthdate}', '{$gender}')";
if (mysql_query($query)) {
echo "<script type=\"text/javascript\">
alert(\"New member added successfully.\");
window.location = \"registration.php\"
</script>";
} else {
die("Failed: " . mysql_error());
}
?>
⚠ 安全提醒: 範例使用已棄用的 mysql_* 函數與簡單 SHA1 加密,生產環境請改用 PDO 或 MySQLi 預處理語句,並採用 password_hash() 加密密碼,防止 SQL 注入與洩露。
提交表單後若彈出「New member added successfully.」即代表成功。登入 MySQL 查詢:
mysql> select * from tblmember;
+----+-------+-------+------------------+------------------------------------------+-------------+--------+
| id | fName | lName | email | password | birthdate | gender |
+----+-------+-------+------------------+------------------------------------------+-------------+--------+
| 10 | test | yang | admin@361way.com | a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 | 1997-Jan-28 | Female |
| 11 | aaa | bbb | test@91it.org | 54df472f438b86fc96d68b8454183394ef26b8ac | 1997-Jan-18 | Female |
+----+-------+-------+------------------+------------------------------------------+-------------+--------+
2 rows in set (0.00 sec)
兩筆測試數據已正常寫入,註冊流程打通。
mysqli 或 PDO 並啟用預處理語句password_hash(PASSWORD_BCRYPT) 加密掌握此流程後,即可延伸至登入驗證、密碼重置、會員中心等核心功能開發。