Chuyển đến nội dung chính

Cách viết một trang đăng ký và trang đăng nhập với php7 và database là mysql.

OK, đã rất lâu rồi không làm việc lại với PHP và MySQL, hiện tại phiên bản PHP đã có version 8.0.9 và ngày release là 29 tháng 7 năm 2021. 






Phiên bản tăng liên tục nên một số thư viện cũng nhưng các function kèm theo cũng loại bỏ và phát triển các thư viện mới hơn. 

Ví dụ điển hình như PHP 5 thì dùng mysql_connect để kết nối với database MySQL, còn PHP version cao hơn thì sử dụng mysqli_connect. 

Trước khi vào làm bài này thì bạn cần phải chuẩn bị cài đặt trước. 

1. Database MySQL 
2. PHP và các thư viện kèm theo.
3. Có thể là Apache hoặc Nginx. 

Tạo database: 

Bạn tạo một file config.php để chứa thông tin database name, username, password, ....


<?php
   define('DB_SERVER', 'localhost');
   define('DB_USERNAME', 'root');
   define('DB_PASSWORD', 'xxxx');
   define('DB_DATABASE', 'development_db');
   $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>


Bạn phải tạo một database có tên là: development_db, trong database này bạn tạo một table có tên là customer: 

CREATE TABLE `customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `username` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Tạo trang đăng ký:

Trước tiên bạn tạo một file server.php có nội dung sau : 

<?php

session_start();


// initializing variables

$username = "";

$email    = "";

$errors = array(); 


// connect to the database

$db = mysqli_connect('localhost', 'root', '', 'development_db');


// REGISTER USER

if (isset($_POST['reg_user'])) {

  // receive all input values from the form

  $username = mysqli_real_escape_string($db, $_POST['username']);

  $email = mysqli_real_escape_string($db, $_POST['email']);

  $password_1 = mysqli_real_escape_string($db, $_POST['password_1']);

  $password_2 = mysqli_real_escape_string($db, $_POST['password_2']);


  // form validation: ensure that the form is correctly filled ...

  // by adding (array_push()) corresponding error unto $errors array

  if (empty($username)) { array_push($errors, "Username is required"); }

  if (empty($email)) { array_push($errors, "Email is required"); }

  if (empty($password_1)) { array_push($errors, "Password is required"); }

  if ($password_1 != $password_2) {

array_push($errors, "The two passwords do not match");

  }


  // first check the database to make sure 

  // a user does not already exist with the same username and/or email

  $user_check_query = "SELECT * FROM customer WHERE username='$username' OR email='$email' LIMIT 1";

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

  $user = mysqli_fetch_assoc($result);

  

  if ($user) { // if user exists

    if ($user['username'] === $username) {

      array_push($errors, "Username already exists");

    }


    if ($user['email'] === $email) {

      array_push($errors, "email already exists");

    }

  }


  // Finally, register user if there are no errors in the form

  if (count($errors) == 0) {

  $password = md5($password_1);//encrypt the password before saving in the database


  $query = "INSERT INTO customer (username, email, password) 

    VALUES('$username', '$email', '$password')";

  mysqli_query($db, $query);

  $_SESSION['username'] = $username;

  $_SESSION['success'] = "You are now logged in";

  header('location: index.php');

  }

}


Đoạn code trên cho ta thấy khi đăng ký một user thì các bước thực thi như thế nào ? 
Step 1 : kết nối tới database. 
Step 2: Lấy thông tin từ form HTML của trang đăng ký.
Step 3: Verify các thông tin 
Step 4: INSERT thông tin có được vào database và mã hóa trường password theo thuật toán md5. 

Trang đăng ký HTML như sau: 

<?php include('server.php') ?>

<!DOCTYPE html>

<html>

<head>

  <title>Registration system PHP and MySQL</title>

  <link rel="stylesheet" type="text/css" href="style.css">

</head>

<body>

  <div class="header">

  <h2>Register</h2>

  </div>

  <form method="post" action="register.php">

  <?php include('errors.php'); ?>

  <div class="input-group">

    <label>Username</label>

    <input type="text" name="username" value="<?php echo $username; ?>">

  </div>

  <div class="input-group">

    <label>Email</label>

    <input type="email" name="email" value="<?php echo $email; ?>">

  </div>

  <div class="input-group">

    <label>Password</label>

    <input type="password" name="password_1">

  </div>

  <div class="input-group">

    <label>Confirm password</label>

    <input type="password" name="password_2">

  </div>

  <div class="input-group">

    <button type="submit" class="btn" name="reg_user">Register</button>

  </div>

  <p>

  Already a member? <a href="login.php">Sign in</a>

  </p>

  </form>

</body>

</html>



OK , xong phần đăng ký, bạn có thể truy cập vào trang register.php ở trên để thử đăng ký. 
Cho chắc chắn bạn truy cập vào database xem có user được thêm vào trong database không ? 

mysql> select * from customer;

+----+----------+----------------------------+----------------------------------+

| id | username | email                      | password                         |

+----+----------+----------------------------+----------------------------------+

|  1 | thanh    | thanh.nguyen2891@gmail.com | 81dc9bdb52d04dc20036dbd8313ed055 |

|  2 | ha       | ha@gmail.com               | b59c67bf196a4758191e42f76670ceba |

+----+----------+----------------------------+----------------------------------+

2 rows in set (0.00 sec)


Bạn sẽ thấy thông tin trong database. 

Tạo trang đăng nhập:

Trang đăng nhập có nội dung sau : 

<?php

   ini_set('display_errors', 1);

   include("config.php");

   session_start();

   

   if($_SERVER["REQUEST_METHOD"] = "POST") {

      // username and password sent from form 

      

      $myusername = mysqli_real_escape_string($db,isset($_POST['username']) ? $_POST['username'] : '');

      $mypassword = mysqli_real_escape_string($db,isset($_POST['password']) ? $_POST['password'] : ''); 

      $password = md5($mypassword);     

       $sql = "SELECT * FROM customer WHERE username='$myusername' AND password='$password'";

      $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;

            width:100px;

            font-size:14px;

         }

         .box {

            border:#666666 solid 1px;

         }

      </style>

      

   </head>

   

   <body bgcolor = "#FFFFFF">

      <div align = "center">

         <div style = "width: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>



Bạn tạo một trang session để giử session khi bạn đã đăng nhập, và bạn muốn mở 1 tab cho trang mới : 

Tạo trang session.php

Có nội dung sau : 


<?php
   include('config.php');
   session_start();
   
   $user_check = $_SESSION['login_user'];
   
   $ses_sql = mysqli_query($db,"select username from customer 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");
      die();
   }
?>
Vậy là bạn đã hoàn thành một một bài tập tạo trang đăng ký, trang đăng nhập với PHP , MySQL cơ bản.



Nhận xét

Bài đăng phổ biến từ blog này

Trang web medium.com chết, vì sao ?

 Medium.com là trang web có những bài viết về IT, phần mềm và công nghệ nói chung rất phổ biến và chất lượng.  Nhưng khoảng 1 tuần nay không vào được bằng cả mạng viettel và 4G của Mobi phone.  Dân It thường tham khảo các bài viết trên trang này. Nhiều bài viết hay và chất lượng. là một cơ sở dữ liệu lớn cho dân IT nhưng đã bị chặn.  Các bài viết này thường thì có tính quy chuẩn và dài hơn, các topic có chất lượng hơn so với stackoverflow.  Nhưng các subdomain thì vẫn truy cập được như:  https://about.medium.com Bạn có thể tham khảo lý do vì sao medium.com bị chặn ở Việt nam. tại trang tinh tế:  Nói chung mình không thích điều này.  https://tinhte.vn/thread/website-medium-khong-truy-cap-duoc-la-do-website-chet-hay-chan-ip-viet-nam-nhi.3231608/

Cách sử dụng sys.argv trong python.

Cách sử dụng sys.argv trong python. sys.argv là môt danh sách [list] trong python, nó được sư dụng khi bạn chạy một lệnh command-line nào đó trên hệ thống. Và argument này được đẩy vào script python để thực thi khi chạy câu lệnh. Ví dụ: python sys.argv arg1 arg2 Trước tiên bạn phải import mô đun sys trong script. import sys print "This is the name of the script: " , sys . argv [ 0 ] print "Number of arguments: " , len ( sys . argv ) print "The arguments are: " , str ( sys . argv ) Tên của script này : sysargv.py Số lượng arg là : 1 Arg là : ['sysargv.py'] python test1020.py 111 This is the name of the script:  test1020.py Number of arguments:  2 The arguments are:  ['test1020.py', '111']

GitHub Actions là gì ? Làm quen với GitHub Actions.

  Như ta đã biết github là nới chứa source code nổi tiếng thế giới hiện nay, ngoài github còn có gitlab, bitbucket, codecommit, ... Cơ bản github miễn phí cho người dùng developer, nếu nhu cầu sử dụng nhiều repo cũng như project có nhiều thanh viên developer tham gia thì bạn có thể mua bản nâng cao.  Về tiến trình CI/CD process, chúng ta có thể biết tới như Jenkins, Team City, Codepipeline trên AWS, ...  GitHub Actions mới ra đời gần đây , ngày 13 tháng 11 năm 2019, GitHub Actions ra phiên bản đầu tiên, trước đó khoảng 1 năm bản beta ra đời.  Tham khảo tại đây : https://github.blog/2019-08-08-github-actions-now-supports-ci-cd/ GitHub Actions khá đơn giản, khi tiến trình build, test và deploy được viết trong một file có định dạng yaml nằm trong thư mục .github/workflows/ trong chính source code của bạn.  GitHub Actions là một event-driven nghĩa là chương trình chạy một loạt các dòng lệnh khi bạn nhận được 1 event, ví dụ mỗi lần một developer nào đó tạo một pull request cho một repositor