Bài 07: 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, ...

Để làm được chức năng đăng nhập thì bạn phải thực hiện các bước như sau:

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 dang ky thanh vien
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 '<script language="javascript">alert("Thông tin đăng nhập bị sai"); window.location="register.php";</script>';
         
        // 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 '<script language="javascript">alert("Đăng ký thành công"); window.location="register.php";</script>';
        }
        else {
            echo '<script language="javascript">alert("Có lỗi trong quá trình xử lý"); window.location="register.php";</script>';
        }
    }
}

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é cheeky

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 yes. Bạn thử code theo thì sẽ thấy sự lợi hại cũng như sự đam mê của một lập trình viên PHP. Ở ví dụ này thật sự rất basic dành cho newbie nên nếu bạn đã giỏi thì bài này không phải dành cho bạn. Bài tiếp theo ta sẽ tìm hiểu hàm isset và hàm empty, chúc bạn học tốt !

Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website lấy nội dung mà không để nguồn hoặc copy bài với số lượng lớn.

Nguồn: freetuts.net

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net. Sinh năm 90 và có 1 vợ 2 con, thích ca hát và lập trình.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Group Facebook để được hỗ trợ nhanh nhất.