Trang

Monday, June 8, 2015

Hướng dẫn tạo trang đăng ký, đăng nhập, đăng xuất, quản lý bằng PHP &MySQL






Bạn đang làm một website? Site của bạn thuộc dạng chuyên nghiệp? hay nghiệp dư? ... thì cơ bản bạn cũng phải cần đến một trang đăng ký dùng để tạo tài khoản và trang đăng nhập dùng để truy nhập tài khoản đã đăng ký. Trong phạm vi bài viết này tôi sẽ trình bày cách viết 1 trang đăng ký, đăng nhập cơ bản mà bạn có thể ứng dụng ngay.

1/ Tạo kết nối database:

Tạo file "mysql.php" có code như sau:
PHP Code:
<?php
$db_host 
"localhost"// Giữ mặc định là localhost$db_name    'demo';// Can thay doi$db_username    'root'//Can thay doi$db_password    'laivt';//Can thay doi@mysql_connect("{$db_host}""{$db_username}""{$db_password}") or die("Không thể kết nối database");
@
mysql_select_db("{$db_name}") or die("Không thể chọn database");?>?>
Bạn cần phải thay đổi thông tin ở 3 biến $db_name, $db_username, $db_password cho phù hợp với thông tin database của bạn.

2. Tạo table "members" dùng dể chứa thông tin thành viên:

Sau đó bạn tạo file "khoitao.php" có code như sau:
PHP Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>SinhVienIT.Net - Khoi tao CSDL (Huong Dan tao trang dang ki/Dang Nhap)</title>
<?phprequire_once("mysql.php");
@
$create=mysql_query("CREATE TABLE `members` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR( 128 ) NOT NULL ,
`password` VARCHAR( 32 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
`URLS` VARCHAR( 255 ) NOT NULL ,
`Name` VARCHAR( 255 ) NOT NULL ,
`Birthday` VARCHAR( 255 ) NOT NULL ,
`admin` INT( 1 ) NOT NULL DEFAULT '0' ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;"
);
@
$add_admin=mysql_query("
INSERT INTO `demo`.`members` (
`id` ,
`username` ,
`password` ,
`email` ,
`URLS` ,
`Name` ,
`Birthday` ,
`admin`
)
VALUES (
NULL , 'admin', MD5( 'admin' ) , 'admin@sinhvienit.net', 'http://sinhvienit.net', 'Vũ Thanh Lai', '29/09/1990', '1'
);
"
);
if (
$create)
    print 
"Table \"members\" đã được tạo.<br>";
else
    print 
"Table \"members\" chưa được tạo do lỗi truy vấn SQL.<br>";
 
if (
$add_admin)
    print 
"<b>TK Admin:</b><br>User: admin<br>Pass:admin<br>";
else
    print 
"Ko thể tạo tài khoản admin vì lỗi SQL.<br>";
 
echo 
'<a href="http://sinhvienit.net/forum/">Click vào đầy để xem Demo</a>';?>
Bạn tiếp tục chạy file "khoitao.php" này để tiến hành tạo table "members" và tk admin, sau khi tạo xong thì xóa file này đi. Nếu bạn đã quen sử dụng phpMyAdmin thì bạn có thể tự tạo table này, còn đối với newbie thì nên làm theo cách của tôi, sau này bạn có thể tự tìm hiểu thêm.

3. Tạo trang đăng ký:

Tạo file "register.php" có code như sau:

PHP Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>SinhVienIT.Net - Dang ky thanh vien (Huong dan xay dung trang Dang ky/dang Nhap)</title>
<?php// Tải file mysql.php lênrequire_once("mysql.php");//Kiem tra email co hop le hay kofunction check_email($email) {
    if (
strlen($email) == 0) return false;
    if (
eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$"$email)) return true;
    return 
false;
}
if ( 
$_GET['act'] == "do" )
{
    
// Dùng hàm addslashes() để tránh SQL injection, dùng hàm md5() để mã hóa password
    
$username addslashes$_POST['username'] );
    
$password md5addslashes$_POST['password'] ) );
    
$verify_password md5addslashes$_POST['verify_password'] ) );
    
$email addslashes$_POST['email'] );
    
$ten addslashes$_POST['name'] );
    
$sinhnhat addslashes$_POST['sn'] );
    
$url addslashes$_POST['url'] );
    
// Kiểm tra 7 thông tin, nếu có bất kỳ thông tin chưa điền thì sẽ báo lỗi
    
if ( ! $username || ! $_POST['password'] || ! $_POST['verify_password'] || ! $email || ! $ten || ! $sinhnhat || ! $ten)
    {
        print 
"Xin vui lòng nhập đầy đủ các thông tin. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
        exit;
    }
    
// Kiểm tra username nay co nguoi dung chua
    
if ( mysql_num_rows(mysql_query("SELECT username FROM members WHERE username='$username'"))>0)
    {
        print 
"Username này đã có người dùng, Bạn vui lòng chọn username khác. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
        exit;
    }
    
// Kiểm tra email nay co hop le ko
    
if (!check_email($email))
    {
        print 
"Email này ko hợp lệ. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
        exit;
    }
    if (!
ereg("^[0-9]+/[0-9]+/[0-9]{2,4}",$sinhnhat))
    {
        print 
"Ngày tháng năm sinh ko hợp lệ. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
        exit;
    }
    
// Kiểm tra email nay co nguoi dung chua
    
if ( mysql_num_rows(mysql_query("SELECT email FROM members WHERE email='$email'"))>0)
    {
        print 
"Email này đã có người dùng, Bạn vui lòng chọn Email khác. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
        exit;
    }
    
// Kiểm tra mật khẩu, bắt buộc mật khẩu nhập lúc đầu và mật khẩu lúc sau phải trùng nhau
    
if ( $password != $verify_password )
    {
        print 
"Mật khẩu không giống nhau, bạn hãy nhập lại mật khẩu. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
        exit;
    }
    
// Tiến hành tạo tài khoản
    
@$a=mysql_query("INSERT INTO members (username, password, email,URLS,Name,Birthday) VALUES ('{$username}', '{$password}', '{$email}', '{$url}', '{$ten}', '{$sinhnhat}')");
    
// Thông báo hoàn tất việc tạo tài khoản
    
if ($a)
        print 
"Tài khoản {$username} đã được tạo. <a href='login.php'>Nhấp vào đây để đăng nhập</a>";
    else
        print 
"Có lỗi trong quá trình đăng kí, Vui lòng liên hệ BQT";
}
else
{
// Form đăng kýprint <<<EOF<form action="register.php?act=do" method="post">
    <table border="1" width="400" cellspacing="1" style="border-collapse: collapse" bordercolor="#C0C0C0">
        <tr>
            <td>Tên truy nhập:</td>
            <td><input type="text" name="username" value=""></td>
        </tr>
        <tr>
            <td>Mật khẩu:</td>
            <td><input type="password" name="password" value=""></td>
        </tr>
        <tr>
            <td>Xác nhận mật khẩu:</td>
            <td><input type="password" name="verify_password" value=""></td>
        </tr>
        <tr>
            <td>Địa chỉ E-mail:</td>
            <td><input type="text" name="email" value=""></td>
        </tr>
        <tr>
            <td>URL:</td>
            <td><input type="text" name="url" value=""></td>
        </tr>
        <tr>
            <td>Tên:</td>
            <td><input type="text" name="name" value=""></td>
        </tr>
        <tr>
            <td>Sinh nhật  (Ngày/Tháng/Năm):</td>
            <td><input type="text" name="sn" value=""></td>
        </tr>
        <tr>
            <td><input type="submit" name="submit" value="Đăng ký tài khoản"></td>
            <td><Font size="5"> SinhViênIT.Net</Font></td>
        </tr>
    </table>
</form>
EOF;
}
?>
4. Tạo trang đăng nhập:

Tạo file "login.php" có code như sau:
PHP Code:
<?php
session_start
();header('Content-Type: text/html; charset=UTF-8');
echo 
'<title>SinhVienIT.Net - dang nhap (Huong Dan tao trang dang ki/Dang Nhap)</title>';// Tải file mysql.php lênrequire_once("mysql.php");
if ( 
$_GET['act'] == "do" )
{
    
// Dùng hàm addslashes() để tránh SQL injection, dùng hàm md5() để mã hóa password
    
$username addslashes$_POST['username'] );
    
$password md5addslashes$_POST['password'] ) );
    
// Lấy thông tin của username đã nhập trong table members
    
$sql_query = @mysql_query("SELECT id, username, password FROM members WHERE username='{$username}'");
    
$member = @mysql_fetch_array$sql_query );
    
// Nếu username này không tồn tại thì....
    
if ( @mysql_num_rows$sql_query ) <= )
    {
        print 
"Tên truy nhập không tồn tại. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
        exit;
    }
    
// Nếu username này tồn tại thì tiếp tục kiểm tra mật khẩu
    
if ( $password != $member['password'] )
    {
        print 
"Nhập sai mật khẩu. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
        exit;
    }
    
// Khởi động phiên làm việc (session)
    
$_SESSION['user_id'] = $member['id'];
    
$_SESSION['user_admin'] = $member['admin'];
    
// Thông báo đăng nhập thành công
    
print "Bạn đã đăng nhập với tài khoản {$member['username']} thành công. <a href='index.php'>Nhấp vào đây để vào trang chủ</a>";
}
else
{
// Form đăng nhậpprint <<<EOF<form action="login.php?act=do" method="post">
Tên truy nhập: <input type="text" name="username" value="">
Mật khẩu: <input type="password" name="password" value="">
<input type="submit" name="submit" value="Đăng nhập">
</form>
EOF;
}
?>
5. Tạo trang chủ:

Tạo file "index.php" với code như sau:
PHP Code:
<?php 
session_start
();header('Content-Type: text/html; charset=UTF-8');
echo 
'<title>SinhVienIT.Net - Homepage (Huong Dan tao trang dang ki/Dang Nhap)</title>';
require_once(
"mysql.php"); 
if ( !
$_SESSION['user_id'] )

    echo 
"Bạn chưa đăng nhập! <a href='login.php'>Nhấp vào đây để đăng nhập</a> hoặc <a href='register.php'>Nhấp vào đây để đăng ký</a>"
}
else
{
    
$user_id intval($_SESSION['user_id']);
    
$sql_query = @mysql_query("SELECT * FROM members WHERE id='{$user_id}'");
    
$member = @mysql_fetch_array$sql_query ); 
    echo 
"Bạn đang đăng nhập với tài khoản {$member['username']}."
    echo 
"<br><a href='suathongtin.php'>Sửa thông tin</a>";
    if (
$member['admin']=="1")  echo "<br><a href='admin.php'>Trang quản trị</a>";
    echo 
"<br><a href='thoat.php'>Thoát ra</a>";
?>
6. Tạo trang admin:
Tạo file "admin.php" với code như sau:
PHP Code:
<?php 
session_start
();header('Content-Type: text/html; charset=UTF-8');
require_once(
"mysql.php"); 
if ( !
$_SESSION['user_id'] )

    echo 
"Bạn chưa đăng nhập! <a href='login.php'>Nhấp vào đây để đăng nhập</a> hoặc <a href='register.php'>Nhấp vào đây để đăng ký</a>"
}
else

    
$user_id intval($_SESSION['user_id']);
    
$sql_query = @mysql_query("SELECT * FROM members WHERE id='{$user_id}'");
    
$member = @mysql_fetch_array$sql_query ); 
    echo 
"Bạn đang đăng nhập với tài khoản {$member['username']}."
    echo 
"<br><a href='thoat.php'>Thoát ra</a><hr>";
    if (
$member['admin']!="1")  
        echo 
"Bạn ko phải là admin";
    else
    {
        
//Noi dung cac ham, cac lenh va code danh cho admin
        
echo "Các code cho admin ở đây";
    }
 
?>
5. Tạo trang logout:
Tạo file "thoat.php" với code như sau:
PHP Code:
<?php
session_start
();header('Content-Type: text/html; charset=UTF-8');
echo 
'<title>SinhVienIT.Net - Huong Dan tao trang dang ki/Dang Nhap</title>';
if (
session_destroy()) 
    echo 
"Thoát thành công!";
else
    echo 
"KO thể thoát dc, có lỗi trong việc hủy session";
 
echo 
'<br><a href="http://sinhvienit.net/forum/">Bấm vào đây để quay lại trang chủ<br></a>';?>
5. Tạo trang sửa thông tin cá nhân:
Tạo file "suathongtin.php" với code như sau:
PHP Code:
<?php 
session_start
();header('Content-Type: text/html; charset=UTF-8');
echo 
'<title>SinhVienIT.Net - Sua thong tin ca nhan (Huong Dan tao trang dang ki/Dang Nhap)</title>';
echo 
'<a href="http://sinhvienit.net/forum/">Bấm vào đây để quay lại<br></a>';
require_once(
"mysql.php"); 
if ( !
$_SESSION['user_id'] )

    echo 
"Bạn chưa đăng nhập! <a href='login.php'>Nhấp vào đây để đăng nhập</a> hoặc <a href='register.php'>Nhấp vào đây để đăng ký</a>"
}
else

    
$user_id intval($_SESSION['user_id']);
    
$sql_query = @mysql_query("SELECT * FROM members WHERE id='{$user_id}'");
    
$member = @mysql_fetch_array$sql_query ); 
    
//----Noi dung thong bao sau khi sua
    
$thanhcong='Sửa thành công <a href="http://sinhvienit.net/forum/">Quay lại</a>';
    
$kothanh='Sửa ko thành công';
    echo 
"<b>Đang Sửa tài khoản {$member['username']}</b>.<br>"
 
 
 
    if (
$_GET['do']=="sua") {
        
$ten addslashes$_POST['name'] );
        
$pass md5addslashes$_POST['pass'] ) );
        
$sn addslashes$_POST['sn'] );
        
$url addslashes$_POST['url'] );
        
$email addslashes$_POST['email'] );
        
$sql="
        UPDATE `members` SET
        `email` = '"
.$email."',
        `URLS` = '"
.$url."',
        `Name` = '"
.$ten."',
        `Birthday` = '"
.$sn."' WHERE `id` =$user_id LIMIT 1 ;";
 
 
        if (
$sua=mysql_query($sql))
            echo 
$thanhcong;
        else
            echo 
$kothanh;
 
        if (
$_POST['pass']!="") {
            
$sqlx="UPDATE `members` SET `password` = '".$pass."' WHERE `id` = '$user_id' LIMIT 1 ;";
            
$suapass=mysql_query($sqlx);
            if (
$suapass
                echo 
"(Đã đổi pass) ";
            else
                echo 
"(Chưa đổi pass) ";
        }
    }
    else
        echo
"
        <form method='POST' action='?do=sua'>
            <table border='1' width='100%' id='table1' cellspacing='0' cellpadding='0' style='border-collapse: collapse' bordercolor='#C0C0C0'>
                <tr>
                    <td>Tên:</td>
                    <td><input type='text' value='
{$member['Name']}' name='name' size='20'></td>
                </tr>
                <tr>
                    <td>URL:</td>
                    <td><input type='text' value='
{$member['URLS']}' name='url' size='20'></td>
                </tr>
                <tr>
                    <td>Sinh Nhật:</td>
                    <td><input type='text' name='sn' value='
{$member['Birthday']}' size='20'></td>
                </tr>
                <tr>
                    <td>Email:</td>
                    <td><input type='text' name='email' value='
{$member['email']}' size='20'></td>
                </tr>
                <tr>
                    <td>Pass:</td>
                    <td><input type='password' name='pass' size='20'></td>
                </tr>
            </table>
            <p align='center'><input type='submit' value='Sửa'><input type='reset' value='Khôi phục' name='B2'></p>
        </form>
        "
;
?>
Chúc các bạn thành công!

Lưu ý: 
Các bạn nên dùng các trình soạn thảo chuyên cho lập trình để tạo các file trên, Nếu dùng Notepad của window thì có thể sẽ bị lỗi khởi động session nếu lưu dạng UTF-8, còn nếu lưu dạng Ascii thì lại bị lỗi font


Các bạn có thể tải ví dụ mình làm sẵn ở đính kèm để test thửhttp://www.mediafire.com/download.php?w94b9kzp90t3592
Link dự phòng 1: http://upfile.vn/dkQJ
Link dự phòng 2: http://sinhvienit.net/forum/attachm...23-09-2009.zip

5 comments:

  1. CREATE TABLE MyGuests (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    firstname VARCHAR(30) NOT NULL,
    lastname VARCHAR(30) NOT NULL,
    email VARCHAR(50),
    reg_date TIMESTAMP
    )

    ReplyDelete
  2. Muốn link file trong php có nhiều cách

    Code:
    1. echo "Đăng nhập";
    2. include("login.php");
    3. ....

    ReplyDelete
  3. $conn = mysql_connect(“localhost”,”username”, “password”) or
    die (“Could not connect to localhost”);
    mysql_select_db(“test”, $conn) or
    die(“could not select database”);
    $query = “create table my_table (col_1 int not null primary key,
    col_2 text,)”;
    mysql_query($query) or
    die(mysql_error());

    ReplyDelete
  4. mysql> use db_name
    Database changed
    mysql> create tbl_name
    -> (
    -> name varchar(40) null,
    -> location varchar(40) null,
    -> email varchar(40) null,
    -> url varchar(40) null,
    -> comments text null
    -> )
    -> ;
    Query OK, 0 rows affected (0.00 sec)
    mysql>

    ReplyDelete
  5. Note
    The older TYPE option was synonymous with ENGINE. TYPE was deprecated in MySQL 4.0 and removed in MySQL 5.5. When upgrading to MySQL 5.5 or later, you must convert existing applications that rely on TYPE to use ENGINE instead.
    Therefore, you want:

    CREATE TABLE dave_bannedwords(
    id INT(11) NOT NULL AUTO_INCREMENT,
    word VARCHAR(60) NOT NULL DEFAULT '',
    PRIMARY KEY (id),
    KEY id(id) -- this is superfluous in the presence of your PK, ergo unnecessary
    ) ENGINE = MyISAM ;

    ReplyDelete