01/10/2018, 15:32

Bài 24: PHP – MySQL Login

Bài học này sẽ giúp bạn tạo một trang login với database MySQL. Tạo một file config.php để cấu hình thông tin kết nối với database. <?php define(‘DB_SERVER’, ‘localhost:3036’); define(‘DB_USERNAME’, ‘root’); ...

Bài học này sẽ giúp bạn tạo một trang login với database MySQL.

Tạo một file config.php để cấu hình thông tin kết nối với database.

 <?php

   define(‘DB_SERVER’, ‘localhost:3036’);

   define(‘DB_USERNAME’, ‘root’);

   define(‘DB_PASSWORD’, ‘rootpassword’);

   define(‘DB_DATABASE’, ‘database’);

 $db=mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE;

//nếu bạn thực hành trên localhost, hoặc source code là server duy nhất thì DB_SERVER bạn gõ localhost vào.

?>

Trong ví dụ tôi đã sử dụng mysqli_connect thay vì bài học hôm trước chúng ta đã học về mysql_connect. Vậy mysqli là gì? Sẽ có một bài mô tả và cách sử dụng cũng như quyết định chọn lựa cách thức nào để thao tác với database, đó là sử dụng mysql hoặc mysqli hoặc PDO.

Còn bây giờ xin nói sơ về mysqli, chữ i là viết tắt cho chữ improved, tức là mysqli cải tiến và có nhiều hổ trợ hơn mysql như transaction, trả về đối tượng, bảo mật, hổ trợ gọi nhiều sql query chỉ trong một lần gọi mysqli v.v…

Câu lệnh có khác với mysql đôi chút ở phần đối số cũng như thứ tự.

Nếu mysql cho bạn thực hiện kết nối rồi sau đó mới chọn db thì ở ngay trong mysqli, bạn chỉ định cho db luôn, rất tiện lợi phải không nào.

Vâng ví dụ bạn thấy đó là cú pháp kết nối của mysqli.

Tiếp đến tạo một file là Login.php, file này nằm cùng cấp với file config.php để ta include vào cho đơn giản.

<?php

   include(“config.php”);

   session_start();

   if($_SERVER[“REQUEST_METHOD”] == “POST”) {

      // username and password sent from form

      $myusername = mysqli_real_escape_string($db,$_POST[‘username’]);

      $mypassword = mysqli_real_escape_string($db,$_POST[‘password’]);

      $sql = “SELECT id FROM admin WHERE username = ‘$myusername’ and passcode = ‘$mypassword'”;

      $result = mysqli_query($db,$sql);

      $row = mysqli_fetch_array($result,MYSQLI_ASSOC);

      $active = $row[‘active’];

      $count = mysqli_num_rows($result);

      // If result matched $myusername and $mypassword, table row must be 1 row

      if($count == 1) {

          $_SESSION[‘login_user’] = $myusername;

         header(“location: welcome.php”);

      }else {

         $error = “Your Login Name or Password is invalid”;

      }

   }

?>

<html>

   <head>

      <title>Login Page</title>

      <style type = “text/css”>

         body {

            font-family:Arial, Helvetica, sans-serif;

            font-size:14px;

         }

         label {

            font-weight:bold;

            awidth:100px;

            font-size:14px;

         }

         .box {

            border:#666666 solid 1px;

         }

      </style>

   </head>

   <body bgcolor = “#FFFFFF”>

      <div align = “center”>

         <div style = “awidth:300px; border: solid 1px #333333; ” align = “left”>

            <div style = “background-color:#333333; color:#FFFFFF; padding:3px;”><b>Login</b>

    </div>

            <div style = “margin:30px”>

               <form action = “” method = “post”>

                  <label>UserName  :</label><input type = “text” name = “username” class = “box”/>

            <br /><br />

            <label>Password  :</label><input type = “password” name = “password” class = “box” />

           <br/><br />

                  <input type = “submit” value = ” Submit “/><br />

               </form>

               <div style = “font-size:11px; color:#cc0000; margin-top:10px”><?php echo $error; ?></div>

            </div>

         </div>

      </div>

   </body>

</html>

Trong ví dụ trên đa phần các hàm sử dụng các bạn đã quen thuộc từ bài học trước đó, và chỉ có hàm mới là “mysqli_num_rows”, hàm này trả về số dòng kết quả. Tức là có bao nhiêu record trả về từ câu truy vấn.

Nếu kiễm tra thông tin đúng và login thành công thì ta sẽ chuyển sang trang welcome.php để thông báo, ta sử dụng hàm header(“location: welcome.php”); để chuyển trang trong PHP.

File welcome.php có nội dung sau:

<?php

   include(‘session.php’);

?>

<html”>

   <head>

      <title>Welcome </title>

   </head>

   <body>

      <h1>Welcome <?php echo $login_session; ?></h1>

      <h2><a href = “logout.php”>Sign Out</a></h2>

   </body>

</html>

File session.php như sau:

<?php

   include(‘config.php’);

   session_start();

   $user_check = $_SESSION[‘login_user’];

   $ses_sql = mysqli_query($db,”select username from admin where username = ‘$user_check’ “);

   $row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC);

   $login_session = $row[‘username’];

   if(!isset($_SESSION[‘login_user’])){

      header(“location:login.php”);

   }

?>

Diễn giải:

File config giúp tạo kết nối tới database, và trả về đối tượng kết nối là $db.

Có đối tượng kết nối nên ta tiến hành query dữ liệu nếu  query trả về kết quả thì chứng tỏ username và password đúng, trong file Login.php ta phải đưa file kết nối config.php vào bằng câu lệnh include.

Nếu login thành công thì ta đặt session, để khi bạn truy cập hoặc chuyển sang trang khác thì code của bạn sẽ kiếm tra rằng user đã login trước đó rồi, nên đừng bắt login lại nữa  nó chưỡi chết.

Do vậy ở bất kỳ trang nào khác chúng ta phải sử dụng file session.php để kiễm tra user đang login hay chưa, nếu chưa thì sẽ redirect về trang login.php .

Logout

Bạn có thể đặt một nút hoặc 1 link để chạy vào file Logout.php

<?php

   session_start();

   if(session_destroy()) {

      header(“Location: login.php”);

   }

?>

File này đơn giản chỉ làm nhiệm vụ là hủy session và chuyển sang trang login.php. Nếu bạn chạy file này rồi thì khi bạn cố tình gõ vào trang welcome.php thì khi đó file session.php sẽ thực thi do file welcome.php có include session.php, và nó thấy session $_SESSION[‘login_user’] không tồn tại nên sẽ chuyển về trang đăng nhập.

Vâng bạn đã tạo thành công một trang login/logout đơn giản với PHP và MySQL.

Bài tập:

  • Hãy tạo table user với các thuộc tính: id, username, password, full_name. Các thông tin này cơ bản và chính yếu cần để thực hành, bạn thích thì cho thêm addresss, gender hoặc bất kỳ cái gì khác vào. Đồng thời đưa vào dòng dữ liệu cho vài account, password thì không cần mã hóa.
  • Cũng yêu cầu như bài 1, nhưng sử dụng mysql thay vì như trong bài học ta dùng mysqli.

Lưu ý. chỉ mysql phiên bản 4.3.1 trở lên mới dùng mysqli và php 5.

Trịnh Tiến Mạnh

27 chủ đề

6824 bài viết

Cùng chủ đề
0