Sistem login adalah fitur penting untuk setiap situs yang memiliki keanggotaan. ImplementasiĀ sistem registrasi dan login sangat mudah dengan PHP. Dalam tutorial ini, saya akan menunjukkan cara untuk membuat sistem login sederhana dengan PHP dan MySQL.
Script PHP ini akan memperlihatkan sistem registrasi user/pengguna dan login dengan MySQL dan PHP Session. PHP server side validation juga digunakan pada login dan registrasi untuk memvalidasi data pengguna.
Sebelumnya lihat dulu file apa saja yang digunakan dan menggunakannya dalam Sistem Login PHP.
user.php
– menangani databaseakunuser.php
– menangani permintaan pendaftaran, login, dan logout dengan Class Userindex.php
– menampilkan form login dan atau rincian penggunadaftar.php
– menampilkan form registrasistyle.css
– mengatur tampilan form
Membuat table pada database
Sebuah tabel diperlukan untuk menyimpan rincian pengguna dalam database. Script SQL berikut ini untuk membuat tabel user
dengan beberapa kolom yang diperlukan.
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nama_awal` varchar(20) COLLATE utf8_unicode_ci NOT NULL, `nama_akhir` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `email` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `telp` varchar(15) COLLATE utf8_unicode_ci NOT NULL, `dibuat` datetime NOT NULL, `diubah` datetime NOT NULL, `status` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '1', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Class User (user.php)
Class User ini untuk menangani dabase yang berkaitan, berisi 3 metode: __construct()
, getRows()
, dan insert()
. __construct()
adalah fungsi yang digunakan untuk menghubungkan database, GetRows()
adalah fungsi yang digunakan untuk mengambil data pengguna dari database, dan insert()
adalah fungsi untuk memasukkan rincian pengguna ke database. Dalam file ini, kamu perlu mengubah nilai variabel $dbHost, $dbUsername, $dbPassword, $dbname dengan kredensial database MySQL kamu.
<?php /* * Class User * Class ini digunakan untuk database yang terkait dengan operation (fetch, dan insert) */ class User{ private $dbHost = 'localhost'; private $dbUsername = 'root'; private $dbPassword = ''; private $dbName = 'codingan'; private $userTbl = 'user'; public function __construct(){ if(!isset($this->db)){ // menghubungkan ke databse $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName); if($conn->connect_error){ die("Gagal terhubung dengan MySQL: " . $conn->connect_error); }else{ $this->db = $conn; } } } //Mengembalikan row dari database berdasarkan Kondisi public function getRows($kondisi = array()){ $sql = 'SELECT '; $sql .= array_key_exists("select",$kondisi)?$kondisi['select']:'*'; $sql .= ' FROM '.$this->userTbl; if(array_key_exists("where",$kondisi)){ $sql .= ' WHERE '; $i = 0; foreach($kondisi['where'] as $key => $value){ $pre = ($i > 0)?' AND ':''; $sql .= $pre.$key." = '".$value."'"; $i++; } } if(array_key_exists("order_by",$kondisi)){ $sql .= ' ORDER BY '.$kondisi['order_by']; } if(array_key_exists("start",$kondisi) && array_key_exists("limit",$kondisi)){ $sql .= ' LIMIT '.$kondisi['start'].','.$kondisi['limit']; }elseif(!array_key_exists("start",$kondisi) && array_key_exists("limit",$kondisi)){ $sql .= ' LIMIT '.$kondisi['limit']; } $hasil = $this->db->query($sql); if(array_key_exists("return_type",$kondisi) && $kondisi['return_type'] != 'all'){ switch($kondisi['return_type']){ case 'count': $data = $hasil->num_rows; break; case 'single': $data = $hasil->fetch_assoc(); break; default: $data = ''; } }else{ if($hasil->num_rows > 0){ while($row = $hasil->fetch_assoc()){ $data[] = $row; } } } return !empty($data)?$data:false; } //Memasukan data ke dalamn database public function insert($data){ if(!empty($data) && is_array($data)){ $kolom = ''; $Value = ''; $i = 0; if(!array_key_exists('dibuat',$data)){ $data['dibuat'] = date("Y-m-d H:i:s"); } if(!array_key_exists('diubah',$data)){ $data['diubah'] = date("Y-m-d H:i:s"); } foreach($data as $key=>$val){ $pre = ($i > 0)?', ':''; $kolom .= $pre.$key; $Value .= $pre."'".$val."'"; $i++; } $kueri = "INSERT INTO ".$this->userTbl." (".$kolom.") VALUES (".$Value.")"; $insert = $this->db->query($kueri); return $insert?$this->db->insert_id:false; }else{ return false; } } }
akunuser.php
File ini mengontrol permintaan pendaftaran, login, dan logout yang berasal dari index.php dan daftar.php. Class User digunakan untuk mendapatkan dan memasukkan rincian pengguna ke table user. Juga, PHP Session digunakan untuk mempertahankan status login pengguna.
<?php //memulai Session session_start(); //memuat dan menginisialisasi class User include 'user.php'; $user = new User(); if(isset($_POST['daftarSubmit'])){ //memeriksa apakah rincian user kosong if(!empty($_POST['nama_awal']) && !empty($_POST['nama_akhir']) && !empty($_POST['email']) && !empty($_POST['telp']) && !empty($_POST['password']) && !empty($_POST['confirm_password'])){ //membandingkan password and konfirmasi password if($_POST['password'] !== $_POST['confirm_password']){ $sesiData['status']['type'] = 'error'; $sesiData['status']['msg'] = 'Konfirmasi password harus sama dengan password.'; }else{ //memeriksa apakah user sudah ada di dalam database $kondSblmnya['where'] = array('email'=>$_POST['email']); $kondSblmnya['return_type'] = 'count'; $userSblmnya = $user->getRows($kondSblmnya); if($userSblmnya > 0){ $sesiData['status']['type'] = 'error'; $sesiData['status']['msg'] = 'Email sudah ada, silakan gunakan email yang lain.'; }else{ //memasukkan data user dalam database $userData = array( 'nama_awal' => $_POST['nama_awal'], 'nama_akhir' => $_POST['nama_akhir'], 'email' => $_POST['email'], 'password' => md5($_POST['password']), 'telp' => $_POST['telp'] ); $insert = $user->insert($userData); //Status ditetapkan berdasarkan data yang dimasukkan if($insert){ $sesiData['status']['type'] = 'sukses'; $sesiData['status']['msg'] = 'Anda telah berhasil didaftarkan.'; }else{ $sesiData['status']['type'] = 'error'; $sesiData['status']['msg'] = 'Terjadi masalah, silahkan coba lagi.'; } } } }else{ $sesiData['status']['type'] = 'error'; $sesiData['status']['msg'] = 'Isi semua bidang.'; } //menyimpan status pendaftaran ke dalam Session $_SESSION['sesiData'] = $sesiData; $redirectURL = ($sesiData['status']['type'] == 'sukses')?'index.php':'daftar.php'; //mengalihkan ke halaman index/pendaftaran header("Location:".$redirectURL); }elseif(isset($_POST['loginSubmit'])){ //memeriksa apakah login yang diinput kosong if(!empty($_POST['email']) && !empty($_POST['password'])){ //mendapatkan data user dari class user $kondisi['where'] = array( 'email' => $_POST['email'], 'password' => md5($_POST['password']), 'status' => '1' ); $kondisi['return_type'] = 'single'; $userData = $user->getRows($kondisi); //Menetapkan data dan status user berdasarkan login if($userData){ $sesiData['userLoggedIn'] = TRUE; $sesiData['userID'] = $userData['id']; $sesiData['status']['type'] = 'sukses'; $sesiData['status']['msg'] = 'Selamat Datang '.$userData['nama_awal'].'!'; }else{ $sesiData['status']['type'] = 'error'; $sesiData['status']['msg'] = 'Email atau password salah, silahkan coba lagi.'; } }else{ $sesiData['status']['type'] = 'error'; $sesiData['status']['msg'] = 'Masukkan email and password.'; } //menyimpan status login ke dalam Session $_SESSION['sesiData'] = $sesiData; //mengalihkan ke halaman home header("Location:index.php"); }elseif(!empty($_REQUEST['logoutSubmit'])){ //menghapus data Session unset($_SESSION['sesiData']); session_destroy(); //menyimpan Status logout ke dalam Session $sesiData['status']['type'] = 'sukses'; $sesiData['status']['msg'] = 'Anda telah berhasil logout dari akun Anda.'; $_SESSION['sesiData'] = $sesiData; //mengalihkan ke halaman home header("Location:index.php"); }else{ //mengalihkan ke halaman home header("Location:index.php"); }
Form Login dan rincian akun pengguna (index.php)
Pertama file index.php
ini berisi form login dan link halaman pendaftaran. Setelah login, user ID tersedia dalam session dan rincian masing-masing pengguna akan ditampilkan menggunakan Class User. Dan, link logout akan muncul jika pengguna sudah login.
<?php session_start(); $sesiData = !empty($_SESSION['sesiData'])?$_SESSION['sesiData']:''; if(!empty($sesiData['status']['msg'])){ $statusPsn = $sesiData['status']['msg']; $jenisStatusPsn = $sesiData['status']['type']; unset($_SESSION['sesiData']['status']); } ?> <!DOCTYPE html> <html> <head> <title>Sistem registrasi dan login dengan PHP dan MySQL</title> <link rel="stylesheet" href="style.css" type="text/css" media="all" /> </head> <body> <h1>Sistem registrasi dan login dengan PHP dan MySQL - Codingan.com</h1> <div class="container"> <?php if(!empty($sesiData['userLoggedIn']) && !empty($sesiData['userID'])){ include 'user.php'; $user = new User(); $kondisi['where'] = array( 'id' => $sesiData['userID'], ); $kondisi['return_type'] = 'single'; $userData = $user->getRows($kondisi); ?> <h2>Selamat Datang <?php echo $userData['nama_awal']; ?>!</h2> <a href="akunuser.php?logoutSubmit=1" class="logout">Logout</a> <div class="regisForm"> <p><b>Nama: </b><?php echo $userData['nama_awal'].' '.$userData['nama_akhir']; ?></p> <p><b>Email: </b><?php echo $userData['email']; ?></p> <p><b>Telp: </b><?php echo $userData['telp']; ?></p> </div> <?php }else{ ?> <h3>Login ke akun Anda</h3> <?php echo !empty($statusPsn)?'<p class="'.$jenisStatusPsn.'">'.$statusPsn.'</p>':''; ?> <div class="regisForm"> <form action="akunuser.php" method="post"> <input type="email" name="email" placeholder="Email" required=""> <input type="password" name="password" placeholder="Pssword" required=""> <div class="tbl-kirim"> <input type="submit" name="loginSubmit" value="Login"> </div> </form> </div> </div> <p><a href="daftar.php">Buat Akun</a></p> <?php } ?> </body> </html>
Form Pendaftaran (daftar.php)
File ini berisi form pendaftaran HTML dan form dikirimkan ke file akunuser.php
dengan permintaan pendaftaran.
<?php session_start(); $sesiData = !empty($_SESSION['sesiData'])?$_SESSION['sesiData']:''; if(!empty($sesiData['status']['msg'])){ $statusPsn = $sesiData['status']['msg']; $jenisStatusPsn = $sesiData['status']['type']; unset($_SESSION['sesiData']['status']); } ?> <!DOCTYPE html> <html> <head> <title>Sistem registrasi dan login dengan PHP dan MySQL</title> <link rel="stylesheet" href="style.css" type="text/css" media="all" /> </head> <body> <h1>Sistem registrasi dan login dengan PHP dan MySQL - Codingan.com</h1> <h3>Buat akun baru</h3> <div class="container"> <?php echo !empty($statusPsn)?'<p class="'.$jenisStatusPsn.'">'.$statusPsn.'</p>':''; ?> <div class="regisForm"> <form action="akunuser.php" method="post"> <input type="text" name="nama_awal" placeholder="Nama Awal" required=""> <input type="text" name="nama_akhir" placeholder="Nama Akhir" required=""> <input type="email" name="email" placeholder="Email" required=""> <input type="text" name="telp" placeholder="Nomor Telp" required=""> <input type="password" name="password" placeholder="Password" required=""> <input type="password" name="confirm_password" placeholder="Konfirmasi Password" required=""> <div class="tbl-kirim"> <input type="submit" name="daftarSubmit" value="Buat Akun"> </div> </form> </div> </div> </body> </html>
Kode CSS
CSS berikut ini digunakan untuk memperindah tampilan form.
.container { width: 40%; margin: 0 auto; background-color: #f7f7f7; color: #757575; font-family: 'Open Sans', sans-serif; text-align: left; padding: 30px; border-radius: 3px; -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); margin-bottom: 50px; } h3 { font-weight: 400; margin-bottom: 10px; } .container p { font-size: 14px; font-weight: 300; margin-bottom: 20px; } .regisForm input[type="text"], .regisForm input[type="email"], .regisForm input[type="password"] { width: 100%; padding: 10px; margin: 10px 0; border: 1px solid #d9d9d9; border-top: 1px solid #c0c0c0; font-weight: 400; font-family: 'Open Sans', sans-serif; display: block; margin-bottom: 10px; z-index: 1; position: relative; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } .tbl-kirim { text-align: center; margin-top: 20px; } .tbl-kirim input[type="submit"] { padding: 10px 0; width: 60%; font-family: 'Open Sans', sans-serif; font-size: 15px; font-weight: 600; border: none; outline: none; color: #FFF; background-color: #2196F3; cursor: pointer; border-radius: 3px; } .tbl-kirim input[type="submit"]:hover { background-color: #1769aa; } a.logout{float: right;} p.sukses{color: #34A853;} p.error{color: #EA4335;}
Kesimpulan
Saya harap tutorial langkah demi langkah dan contoh script tersebut berguna. Menggunakan script tersebut, kamuĀ akan dapat mengintegrasikan sistem login dengan PHP dan MySQL dalam waktu yang singkat. Dan juga, kamu dapat mengembangkan Class User tsb untuk membangun sebuah sistem otentikasi pengguna danĀ sistem manajemen pengguna yang canggih.
terimaksih mas,sangat memmbantu, ditunggu tutorial selanjutnya. tetap berkarya
thanks gan, sangat membantu…
Tutor kasih crud gan
Mas punyaku terjadi masalah error, silahkan coba lagi saat melakukan registrasi, itu kenapa ya?