Membuat Login dengan PHP & MySQLi

MySQL, PHP, 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');

Baca Juga : Cara Membuat Database MySQL

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 $_SESSIONid” 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;
	}
}

Baca Juga : Fungsi String PHP

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 diciptakan 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.