Bài 27: Xây dựng chức năng đăng ký thành viên với php và mysql
Bài này chúng ta sẽ thực hành xây dựng chức năng đăng ký thành viên với php và mysql, đây là một chức năng đơn giản và rất hay được sử dụng trong PHP. Để xem được bài này đòi hỏi bạn phải nghiên cứu qua hai phương thức POST và GET, các thẻ input thông dụng như text, textarea, ...
1. Xây dựng database bảng thành viên
Trước tiên bạn tạo một database tên demo và tạo thêm một bảng member bằng cách chạy câu truy vấn dưới đây:
CREATE TABLE IF NOT EXISTS `member` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, `password` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, `email` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL, `phone` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, `level` tinyint(4) DEFAULT NULL COMMENT '1: admin, 0: member', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
Tiếp theo ta sẽ Insert một user với tên là admin để làm người quản trị:
INSERT INTO `member` ( `username`, `password`, `email`, `phone`, `level` ) VALUES ('admin', MD5('freetuts.net'), 'thehalfheart@gmail.com', '0979306603', '1')
Admin là thành viên quản trị của hệ thống website có và có level = 1. Nghĩa là:
- Nếu user nào có level = 1 là admin => được đăng nhập vào hệ thống quản trị website
- Nếu user nào có level = 0 là thành viên => không được đăng nhập vào hệ thống quản trị website.
Và mật khẩu của admin là MD5('freetuts.net'), nghĩa là trong hệ thống để bảo đảm an toàn thì ta sẽ dùng hàm MD5 để băm mật khẩu lưu vào trong cơ sở dữ liệu. Như vậy khi check Login thì phải dùng hàm MD5 trong PHP để mã hóa trước khi đưa vào so sánh.
2. Xây dựng form đăng ký thành viên
Bạn tạo một file tên register.php với nội dung như sau:
<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form method="post" action="xuly.php"> <table> <tr> <td>Username</td> <td><input type="text" name="username" value=""/></td> </tr> <tr> <td>Password</td> <td><input type="text" name="password" value=""/></td> </tr> <tr> <td>Email</td> <td><input type="email" name="email" value=""/></td> </tr> <tr> <td>Phone</td> <td><input type="text" name="phone" value=""/></td> </tr> <tr> <td>Level</td> <td> <select name="level"> <option value="0">Thành Viên</option> <option value="1">Admin</option> </select> </td> </tr> <tr> <td></td> <td><input type="submit" name="do-register" value="Đăng Ký"/></td> </tr> </table> </form> </body> </html>Action của form mình trỏ đến file xuly.php nên khi submit form hệ thống sẽ gửi thông tin đến file này. Giao diện như sau:
Form đăng ký thành viên
3. Xử lý thao tác đăng ký thành viên
Trước khi xử lý thao tác thêm thành viên thì ta có một số lưu ý như sau:
- Trong hệ thống CSDL thì field id có thuộc tính auto increment (tự động tăng) nên ta không cần truyền giá trị vào lúc thêm
- Thuộc tính Username và Email phải là duy nhất nên trước khi thêm phải kiểm tra bị trùng hay không
Bây giờ bạn tạo file xuly.php với nội dung như sau:
// Thiết lập charset utf8 header('Content-Type: text/html; charset=utf-8'); // Vì tên button submit là do-register nên ta sẽ kiểm tra nếu // tồn tại key này trong biến toàn cục $_POST thì nghĩa là người // dùng đã click register(submit) if (isset($_POST['do-register'])) { // Lấy thông tin // Để an toàn thì ta dùng hàm mssql_escape_string để // chống hack sql injection $username = isset($_POST['username']) ? mysql_escape_string($_POST['username']) : ''; $password = isset($_POST['password']) ? md5($_POST['password']) : ''; $email = isset($_POST['email']) ? mysql_escape_string($_POST['email']) : ''; $phone = isset($_POST['phone']) ? mysql_escape_string($_POST['phone']) : ''; $level = isset($_POST['level']) ? (int)$_POST['level'] : ''; // Validate Thông Tin Username và Email có bị trùng hay không // Kết nối CSDL $conn = mysqli_connect('localhost', 'root', 'vertrigo', 'demo') or die ('Lỗi kết nối'); mysqli_set_charset($conn, "utf8"); // Kiểm tra username hoặc email có bị trùng hay không $sql = "SELECT * FROM member WHERE username = '$username' OR email = '$email'"; // Thực thi câu truy vấn $result = mysqli_query($conn, $sql); // Nếu kết quả trả về lớn hơn 1 thì nghĩa là username hoặc email đã tồn tại trong CSDL if (mysqli_num_rows($result) > 0) { // Sử dụng javascript để thông báo echo '<!--{cke_protected}%3Cscript%20language%3D%22javascript%22%3E'%3B%0A%20%20%20%20%20%20%20%20echo%20'alert(%22T%C3%AAn%20%C4%91%C4%83ng%20nh%E1%BA%ADp%20ho%E1%BA%B7c%20email%20%C4%91%C3%A3%20%C4%91%C6%B0%E1%BB%A3c%20s%E1%BB%AD%20d%E1%BB%A5ng%22)%3B'%3B%20%20%20%20%0A%20%20%20%20%20%20%20%20echo%20'window.location%3D%22register.php%22'%3B%0A%20%20%20%20%20%20%20%20echo%20'%3C%2Fscript%3E-->'; // Dừng chương trình die (); } else { // Ngược lại thì thêm bình thường $sql = "INSERT INTO member (username, password, email, phone, level) VALUES ('$username','$password','$email','$phone', '$level')"; if (mysqli_query($conn, $sql)){ echo '<!--{cke_protected}%3Cscript%20language%3D%22javascript%22%3E'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20echo%20'alert(%22Th%C3%AAm%20Th%C3%A0nh%20C%C3%B4ng%22)%3B'%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20echo%20'%3C%2Fscript%3E-->'; } else { echo '<!--{cke_protected}%3Cscript%20language%3D%22javascript%22%3E'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20echo%20'alert(%22Th%C3%AAm%20Th%E1%BA%A5t%20b%E1%BA%A1i%22)%3B'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20echo%20'window.location%3D%22register.php%22'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20echo%20'%3C%2Fscript%3E-->'; } } }Trong file này bạn chú ý mình sử dụng alert được echo từ php để xuất ra thông báo là thành công hay thất bại. Bây giờ bạn chạy thử và kết quả sẽ:
- Thông báo thành công nếu thao tác thành công
- Thông báo username hoặc email đã tồn tại nếu bạn đăng ký trùng thông tin có sẵn trong CSDL
- Thông báo thất bại nếu thao tác lỗi
Và đồng thơi sau khi thông báo lên màn hình tôi có dùng hàm window.location để redirect sang trang cần thiết. Bây giờ bạn thử test và xem trong CSDL có không nhé
4. Lời kết
Thật đơn giản phải không nào, đến bài này thì bắt đầu cảm thấy thú vị rồi đấy . Bạn thử code theo sẽ thấy sự lợi hại và sự đam mê của nghề coder nhé. Ở ví dụ này thật sự rất basic dành cho newbie nên nếu bạn đa giỏi thì bài này không phải dành cho bạn. Chúc bạn học tốt !