Membuat Login dengan PHP & MySQLi

Tutorial - 17 Sep 2013

Login merupakan salah satu fitur yang paling sering digunakan dalam aplikasi web. Dengan login, setiap pengguna yang akan menggunakan aplikasi web akan diverifikasi terlebih dahulu untuk diketahui apakah pengguna tersebut memiliki hak akses ke sebuah aplikasi ataupun tidak.

Membuat Login dengan PHP & MySQLi

Pada tutorial ini, kita akan membuat fitur login user dengan menggunakan PHP dan MySQLi.

Langkah 1 – Persiapan Membuat Database Login User

Buatlah sebuah tabel user untuk menampung data login user dengan field (id, username, password).

CREATE TABLE `user` (  
`id` int(11) NOT NULL AUTO_INCREMENT,  
`username` varchar(50) NOT NULL,  
`password` varchar(100) NOT NULL,  
PRIMARY KEY (`id`),  
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB;

Selanjutnya, inputkan data login user.

INSERT INTO `belajar`.`user` (`id` ,`username` ,`password`) VALUES (1 , '[email protected]', 'andi');

Langkah 2 – Membuat Desain Form Login

Selanjutnya, menggunakan HTML dan CSS buatlah desain form untuk inputan login.

<form action="" method="post" class="form-login">
    <h2 align="center">Form Login</h2>
    <p>
       <input type="text" name="username" placeholder="Username" class="normal-input" />
 </p>
    <p>
     <input type="password" name="password" placeholder="Password" class="normal-input" />
 </p>
    <input type="submit" value="Login" class="tombol" name="login"  />    
</form>

Langkah 3 – Membuat Koneksi Database

Buatlah file cofig.php untuk membuat koneksi database.

define("HOST", "localhost"); // Host database
define("USER", "root"); // Usernama database
define("PASSWORD", ""); // Password database
define("DATABASE", "belajar"); // Nama database

$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);

if($mysqli->connect_error){
 trigger_error('Koneksi ke database gagal: ' . $mysqli->connect_error, E_USER_ERROR);   
}

Langkah 4 – Membuat Fungsi Login

Membuat fungsi login, fungsi ini nantinya akan mengecek apakah username dan password yang diinputkan user sesuai atau tidak dengan data user di database. Jika sesuai, maka fungsi ini akan bernilai benar (true).

Fungsi Login (fungsi.php)

function login($username, $password, $mysqli){
    // Menggunakan perintah prepared statement untuk menghindari SQL injection
  if($stmt = $mysqli->prepare("SELECT id, password FROM user WHERE username = ?")){
      $stmt->bind_param('s', $username); // Menyimpan data inputan username ke variabel "$username"
        $stmt->execute(); // Menjalankan perintah query MySQL diatas
     $stmt->store_result();
       $stmt->bind_result($id, $dbpassword); // Menyimpan nilai hasil query ke variabel
     $stmt->fetch();
      
        if($stmt->num_rows == 1){ // Jika user ada/ditemukan
         if($dbpassword == $password){ // Lakukan pengecekan password sesuai atau tidak dengan data di database
              // Jika sama ciptakan SESSION id dan password_login
             $id = preg_replace("/[^0-9]+/", "", $id);
               $_SESSION['id'] = $id;
                $_SESSION['password_login'] = $password;
              // Login berhasil
               return true;
            }else{
              // Password tidak sesuai
                return false;   
            }
       }else{
          // User tidak ditemukan
         return false;   
        }
   }
}

Kedua, membuat fungsi cek login. Fungsi ini akan mengecek data SESSION “id” dan “password_login” yang diciptakan oleh web browser.

function cek_login($mysqli){
  // Cek apakah semua variabel session ada / tidak
    if(isset($_SESSION['id'], $_SESSION['password_login'])){
        $id = $_SESSION['id'];
        $password_login = $_SESSION['password_login'];
        
        if($stmt = $mysqli->prepare("SELECT password FROM user WHERE id = ? LIMIT 1")){
            $stmt->bind_param('i', $id); // Menyimpan data id user ke variabel "$id"
         $stmt->execute(); // Menjalankan perintah query MySQL diatas
         $stmt->store_result();
           
            if($stmt->num_rows == 1){ // Jika user ada/ditemukan
             $stmt->bind_result($password);
               $stmt->fetch();
              
                if($password_login == $password){ // Jika passwordnya sesuai
                    // User melakukan login
                 return true;    
                }else{
                  // User tidak melakukan login
                   return false;   
                }
           }else{
              // User tidak melakukan login
               return false;   
            }
       }else{
          // User tidak melakukan login
           return false;   
        }
   }else{
      // User tidak melakukan login
       return false;   
    }
}

Langkah 5 – Melakukan Proses Login

Kemudian, buatlah perintah untuk melakukan proses login. Kita akan membuatnya dihalaman login (index.php).

Proses Login (index.php)

include('config.php');
include('fungsi.php');

session_start(); // Menciptakan session

if(cek_login($mysqli) == true){
 header('location: home.php');
 exit(); 
}

if($_SERVER['REQUEST_METHOD'] == 'POST'){
  if(isset($_POST['username']) and isset($_POST['password'])){
        $username = $_POST['username'];
       $password = $_POST['password'];
       if(login($username, $password, $mysqli) == true){
           // Berhasil login
           header('location: home.php');
         exit();
     }else{
          // Gagal login
          header('location: index.php');
            exit(); 
        }
   }
}

Langkah 6 – Membuat Perintah Logout/Keluar

Perintah ini akan digunakan untuk proses logout/keluar, dimana SESSION yang telah diciptaka tadinya akan dihapus.
Perintah Logout (logout.php)

session_start();
session_destroy();
header('location:index.php');

Langkah 7 – Membuat Proteksi Halaman dengan Login

Jika Anda ingin memproteksi halaman web dengan login, sisipkan fungsi “cek_login” di halaman yang akan Anda proteksi.

Proteksi Halaman Web (home.php)

if(cek_login($mysqli) == false){ // Jika user tidak login
  header('location: index.php'); // Alihkan ke halaman login (index.php)
    exit(); 
}

Kesimpulan

Fitur login diatas masih sederhana, namun yang menjadi perhatian utama ialah konsep penerapan perintah MySQLi terutama dalam penggunaan prepare statement. Silahkan mencoba dan semoga bermanfaat.



  • Ochim

    yang langkah kedua diketik dimana om??

    • Dbuat file baru, misal file index.php. Atau mas bsa ikut cnth yg ada pada source codenya.

  • Muhammad Fauzi

    min, databasenya ane buat di localhost klo mau upload ke hosting harus di ekspor dlu ya??

  • Rendy Wardana

    bagaimana caranya kalau saya ingin menambah data baru pada file home.php mislnya di database ada field alamat sehingga saat user login menampilkan alamat si user..

    • agan tggl tmbahkan saja nama field dan variablenya :
      $stmt = $mysqli->prepare(“SELECT username, alamat FROM user WHERE id = ?”);
      $stmt->bind_result($username, $alamat);