8-3
註冊哪有這麼簡單!
做到這邊很高興終於能新增使用者了,以為以後高枕無憂了?還早的呢...
- 萬一重複註冊怎麼辦?
- Email亂填怎麼辦?
- 部份欄位沒填怎麼辦?
- 密碼會被管理員看到!
所以,要注意的東西多著呢!我們一個一個來處理。
一、避免重複註冊
- 這個最簡單,從資料表結構下手即可。
- 只要將 email 設定成唯一欄位即可。
- 故意重複一下Email格式試試會有什麼結果吧!
二、檢查Email格式
- 若是想檢查 Email 是否有效,最好的方法當然是寄個啟動信到該信箱,讓使用者點擊後才正式啟用(等有空再來做)。
- 在這裡,我們先就「形狀」或者說「Email格式」來做檢查即可,利用之前學到的filter_var來處理即可。若格式正確,會傳回Email,若不正確,會傳回false。
$email = $db->real_escape_string($_POST['email']);
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
if (!$email) {
die("不合法的Email");
}
三、檢查必填欄位
- 其實上述的Email和此處的必填欄位都可以在前端做檢查,但實際上,前端的檢查是可以有技巧的跳過,因此,後端的檢查還是必要的。
- 用簡單的 empty() 函數就可以判斷是否為空值了。或者用 if($變數=="")也可以。
$name = $db->real_escape_string($_POST['name']);
if (empty($name)) {
die("姓名為必填!");
}
$email = $db->real_escape_string($_POST['email']);
if (empty($email)) {
die("Eamil為必填!");
}
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
if (!$email) {
die("不合法的Email");
}
$pass = $db->real_escape_string($_POST['pass']);
if (empty($pass)) {
die("密碼為必填!");
}
四、密碼加密
- 目前最佳的密碼加密方法: password_hash()
- 不可逆!同一個密碼加密後的值會不一樣!
- 可利用 password_verify($password, $hash) 來解密!
$pass = $db->real_escape_string($_POST['pass']);
if (empty($pass)) {
die("密碼為必填!");
}
$pass = password_hash($pass, PASSWORD_DEFAULT);
五、練習
- 想想看,可以乾脆把 Email 設成主索引嗎?優缺點為何?
- 請匯出最新的資料庫結構檔並儲存。
- 清空(非刪除)資料表,並重新註冊正式會員