Hai Sipinter! Kembali lagi di sesi Tutorial Pemrograman PHP dimana disini kita akan membahas semua hal tentang PHP sampai ke akar-akarnya.
Kali ini kita akan membahas bagaimana cara membuat halaman login di PHP, dimana dalam halaman ini akan menjadi pintu gerbang user dapat mengakses semua layanan dalam program web kita.
Bisa dibilang halaman Login merupakan halaman yang sangat memerlukan perlindungan yang sangat tinggi agar tidak gampang diserang hacker.
Kali ini kita tidak akan membahas bagaimana cara mengamankan proses login namun kita akan membahas bagaimana cara membuat halaman login sederhana yang passwordnya dienkripsi menggunakan fungsi password_hash().
Tahapan Membuat Halaman Login:
- Memiliki Tabel User dalam Database
- Membuat Form Login
- Membuat Perintah Login di PHP dengan Mysqli dan password_verify
- Mengatur Halaman PHP Hanya Bisa Diakses Ketika Sudah Login
- Testing Proses Login PHP
Baik mari kita bahas satu persatu tahap membuat halaman login dengan PHP dan MySQL.
Memiliki Tabel User dalam Database MySQL
Untuk melakukan proses login kita memerlukan database “web_pertama” yang berisi tabel “user” yang akan kita gunakan untuk menyimpan data dari setiap user.
Sehingga ketika proses login dilakukan, PHP akan mencocokan apakah email dan password yang diinputkan sama dengan yang ada di tabel user dan jika sama maka login berhasil.
Untuk rancangan tabelnya sendiri bisa dilihat pada gambar di bawah:
Tabel ini sama dengan tabel yang kita gunakan dalam postingan:
Membuat Halaman Register di PHP
Dan cara membuat database dan tabel sudah dijelaskan pada postingan:
Cara Membuat CRUD Database MySQL di PHP.
Membuat Form Login
Proses login biasanya dilakukan melalui form dengan memasukan data username atau email dan password, untuk login yang akan kita buat kita akan menggunakan email dan password.
Buatlah form login sesuai dengan database dan tambahkan tag require agar input form tidak boleh kosong.
form login wajib menggunakan method post dan data form ini akan diarahkan ke file LoginController.php dan form ini sendiri disimpan pada file login.php.
Berikut merupakan kode untuk membuat form login, kode ini kita simpan di file login.php:
<!DOCTYPE html>
<html>
<head>
<title>Login | Web Pertama</title>
</head>
<body>
<h1>Login to System</h1>
<hr>
<div style="color: red">
<?php
//untuk menampikan pesan ketika gagal login ke sistem
if (isset($_GET['pesan'])) {
echo $_GET['pesan'];
}
?>
</div>
<form method="POST" action="LoginController.php">
<table cellspacing="10">
<tr>
<td><label for="email">Email</label></td>
<td><input type="email" name="email" maxlength="100" size="100" required placeholder="Masukan email..."></td>
</tr>
<tr>
<td><label for="password">Password</label></td>
<td><input type="password" name="password" maxlength="30" size="30" required placeholder="Masukan password..."></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="login" value="Login"></td>
</tr>
</table>
</form>
</body>
</html>
Membuat Perintah Login di PHP dengan Mysqli dan password_verify
Karena pada database password user disimpan dalam bentuk kode hash hasil enkripsi data menggunakan fungsi password_hash sehingga untuk mengecek apakah password yang diinputkan sama dengan yang di database kita menggunakan fungsi password_verify().
Berikut merupakan perintah untuk melakukan login ke sistem web yang kita buat:
<?php
if ($_SERVER['REQUEST_METHOD']=='POST' && $_POST['login']=='Login') {
//panggil koneksi database
include 'KoneksiDatabase.php';
$email=trim($_POST['email']);
$password=$_POST['password'];
//cek apakah ada user dengan email yang diinputkan
$perintah=mysqli_query($db,"SELECT id_user,nama,email,password,hak_akses FROM user WHERE email='$email'");
if (mysqli_num_rows($perintah)==1) {
while($data=mysqli_fetch_array($perintah)){
//proses pengecekan apakah password benar
if (password_verify($password, $data['password'])) {
session_start();
$_SESSION['id_user']=$data['id_user'];
$_SESSION['nama']=$data['nama'];
$_SESSION['hak_akses']=$data['hak_akses'];
header('location:dashboard.php');
} else {
header('location:login.php?pesan=Maaf email atau password salah');
}
}
} else {
header('location:login.php?pesan=Maaf email atau password salah');
}
} else {
header('location:login.php');
}
?>
Seperti perintah di atas untuk membuat koneksi database kita hanya perlu memanggil file KoneksiDatabase.php yang berisi:
<?php
//cara agar pesan error mysqli dapat ditangani try catch
mysqli_report(MYSQLI_REPORT_STRICT);
//setting pesan jika koneksi database gagal
define("MYSQL_CONN_ERROR", "Koneksi ke Database Gagal");
$host="127.0.0.1";
$username="root";
$password="";
$database="web_pertama";
try{
$db= mysqli_connect($host,$username,$password,$database);
}catch(mysqli_sql_exception $e){
echo "<h1>Database Gagal Konnek</h1><br>";
echo "<p>$e</p>";
}
?>
Sehingga kita tidak perlu lagi membuat perintah koneksi database berulang kali dan jika kita ingin merubah database yang digunakan kita tinggal merubah perintah pada file KoneksiDatabase.php saja.
Kita juga menggunakan variabel global bawaan PHP yaitu $_SESSION untuk menyimpan data user ketika proses login berhasil.
Dimana variabel $_SESSION akan tersimpan pada web server dan akan hilang ketika kita menghapusnya, logout atau menutup browser kita.
Mengatur Halaman PHP Hanya Bisa Diakses Ketika Sudah Login
Untuk memastikan apakah seseorang sudah login ketika mengakses suatu halaman, Kita tinggal mengecek apakah $_SESSION[‘id_user’] sudah ada atau tidak seperti contoh pada file dashboard.php berikut:
<?php
//perintah untuk memastikan apakah sudah login
session_start();
if (!isset($_SESSION['id_user'])) {
header('location:login.php');
}
?>
<h1>Welcome <?php echo $_SESSION['nama']; ?></h1>
Sehingga jika belum login kita ketika mengakses dashboard.php kita akan langsung dialihkan ke halaman login.php.
Testing Proses Login PHP
Tahap terakhir dari coding adalah melakukan testing untuk memastikan web yang kita buat sudah berjalan sesuai yang dibutuhkan.
Pertama, kita akan melakukan testing dengan mengakses halaman dashboard tanpa login, hasilnya adalah kita dilempar ke halaman login.
Kedua kita mencoba menginputkan email dan password yang salah dan hasilnya kita mendapat pesan peringatan seperti gambar di bawah:
Hasilnya ketika input email dan password salah:
Ketiga, kita akan melakukan testing jika kita menginputkan data email dan password yang benar, apakah kita akan akan langsung dialihkan ke halaman dashboard.php.
hasilnya adalah kita dialihkan ke halaman dashboard, seperti gambar di bawah:
Setelah melakukan testing kita bisa memastikan perintah login di atas sudah berjalan sesuai yang kita butuhkan.
Sekian postingan kali ini postingan ini tidak luput dari kesalahan, jadi jika ada kesalahan admin mohon maaf yang sebesar-besarnya.
“Nikmati sebuah proses mulai dari belajar, mengembangkan sampai kita bisa berbagi untuk orang lain”.
Bantu kami dengan share postingan ini dan ikuti social media Sipintek.
kak mau tanya, data yang tersimpan ke database itu, setelah isi registrasi, di kolom password kok beda sama yang kita isi waktu register. mohon penjelasannya kak
Karena itu sudah diencripsi agar hanya bisa divalidasi oleh sistem