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.
Pada tutorial ini, kita akan membuat fitur login user dengan menggunakan PHP dan MySQLi. Bila Anda masih belum familiar dengan MySQLi, silakan ikuti tutorial MySQLi berikut untuk mempelajarinya lebih lanjut.
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 cofnig.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;
}
}
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();
}
Baca Juga : Mengirim Email dengan PHP dan PHPMailer
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.