Cara membuat form daftar login dan logout dengan php mysql

Jika sebelumnya kita sudah membuat tutorial login dan logout sederhana dengan PHP, kita akan melanjutkan tutorial tersebut tapi dengan implementasi MySQL.

Kode yang akan kita pakai adalah lanjutan dari tutorial sebelumnya, jadi ada baiknya kalian cek dulu artikel sebelumnya ya.

Daftar Isi

Tutorial login dengan PHP dan MySQL kali ini rencananya adalah kita akan menyimpan data user di database. Ketika login, sistem akan mengecek apakah username dan password sesuai dengan data yang dimasukkan user.

Update Kita akan menambahkan cara bagaimana mengetahui kapan user tersebut terakhir login ke dalam database.

1. Siapkan Database User

Pertama kita buat sebuah database dengan nama login atau sesuai dengan keinginan kalian.

Buat table

INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
0.

CREATE TABLE `users` [
              `id` int[11] unsigned NOT NULL AUTO_INCREMENT,
              `username` varchar[255] DEFAULT NULL,
              `password` varchar[255] DEFAULT NULL,
              `nama` varchar[255] DEFAULT NULL,
              `terakhir_login` datetime DEFAULT NULL,
              PRIMARY KEY [`id`]
            ] ENGINE=InnoDB DEFAULT CHARSET=utf8;
            

Copy kode diatas dan running untuk membuat table

INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
0.

Jadi user akan login dengan menggunakan

INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
2 dan
INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
3 yang ada di dalam table
INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
0.

Jika sudah membuat table

INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
0, tambahkan beberapa dummy data untuk kita testing nanti.

INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            

Oke kita sudah punya username

INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
6 dan password
INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
6 untuk kita gunakan nanti.

Buat File koneksi.php

File

INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
8 akan berfungsi untuk menyiapkan semua config yang berhubungan dengan koneksi ke database.

Isinya:


            

Kita akan belajar memakai prepared statement di MySQL ya. Jadi ini adalah salah satu best practice untuk mencegah sql injection. Mungkin nanti kita akan bahas 1 artikel tentang sql injection ini ya.

Penjelasan:

  1. Kita siapkan dulu querynya ya
    
                
    0. Artinya kita akan select 1 user dari table users dengan username dan password dari request form sebelumnya.
  2. 
                
    1 Kita akan cek, jika row nilainya null maka username dan password tidak ditemukan. Jika tidak null maka username dan password ditemukan.
  3. Jika berhasil login, maka kita set session login nilainya true.Kemudian redirect ke halaman index.

Mengamankan Password Dengan Hash

Sebelumnya password yang disimpan di database berupa plain text. Jadi password itu sangat mudah untuk dibaca.

Salah satu cara meningkatkan keamanan adalah dengan menyimpan password dalam bentuk hash jadi tidak mudah untuk dibaca.

Ada beberapa cara untuk melakukan hash password. Cara yang paling simple adalah dengan menggunakan md5. Tapi md5 tidak direkomendasikan untuk hash password karena dapat dengan mudah untuk dipecahkan lagi.

Oleh karena itu, kita akan menggunakan fungsi


            
2. PHP sudah menyediakan fungsi

            
3 yang merupakan wrapper dari fungsi

            
2 untuk meng-enkripsi password kamu dan juga fungsi

            
5 untuk mengecek apakah plain password cocok dengan hasil enkripsi.

Update Password

Kita generate dulu hash dari password admin.


            echo password_hash['admin',PASSWORD_DEFAULT];
            //return $2y$10$Xo6Wcl9yb5g/HfW4S0uMde.CpntrnIYQeuUcMDU.cvWDH46cseMem
            

Setelah kita mendapatkan hasil hashnya, kita update dahulu user admin di database ya.

Kamu bisa hapus user admin dari database, dan insert data baru berikut ini.

INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', '$2y$10$Xo6Wcl9yb5g/HfW4S0uMde.CpntrnIYQeuUcMDU.cvWDH46cseMem', 'Super Admin', NULL];
            

Jika data sudah terupdate, jika kita login lagi sekarang dengan username dan password

INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
6, maka tidak bisa berhasil login karena password sudah dihash.

Selanjutnya kita perlu mengubah file


            

Penjelasan:

  1. 
                echo password_hash['admin',PASSWORD_DEFAULT];
                //return $2y$10$Xo6Wcl9yb5g/HfW4S0uMde.CpntrnIYQeuUcMDU.cvWDH46cseMem
                
    0 Kita hanya cek apakah ada data dengan username yang diinput di database. Jika ya maka akan direturn saat query di execute.
  2. Jika data ditemukan, kita akan cek apakah password dari database sesuai dengan password yang di input dengan fungsi
    
                
    5.

Flow seperti ini cukup bagus karena kita bisa mengecek apakah usernamenya yang salah atau usernamenya sudah benar tapi passwordnya yang masih salah.

Jadi bisa memberikan informasi yang lebih detail kepada user.

Membuat Logout

Untuk proses logout, masih sama seperti sebelumnya. Kita hanya perlu menghapus session login, sehingga user ter-logout dari sistem.


            

Mengupdate Kapan Terakhir Login

Di table

INSERT INTO `users` [`id`, `username`, `password`, `nama`, `terakhir_login`]
            VALUES
            	[1, 'admin', 'admin', 'Super Admin', NULL];
            
0 kita memiliki field

            echo password_hash['admin',PASSWORD_DEFAULT];
            //return $2y$10$Xo6Wcl9yb5g/HfW4S0uMde.CpntrnIYQeuUcMDU.cvWDH46cseMem
            
3 yang berfungsi untuk mengetahui kapan terakhir user tersebut login.

Untuk mengupdate


            echo password_hash['admin',PASSWORD_DEFAULT];
            //return $2y$10$Xo6Wcl9yb5g/HfW4S0uMde.CpntrnIYQeuUcMDU.cvWDH46cseMem
            
3 kita perlu mengupdate kodenya sedikit.

Buka lagi file


            echo password_hash['admin',PASSWORD_DEFAULT];
            //return $2y$10$Xo6Wcl9yb5g/HfW4S0uMde.CpntrnIYQeuUcMDU.cvWDH46cseMem
            
5 dan update di bagian setelah berhasil login.

if[password_verify[$user['password'], $row['password']]]{
            		$_SESSION['login'] = true;
            		$_SESSION['username'] =  $row['username'];
            		$_SESSION['nama'] =  $row['nama'];
            		$_SESSION['terakhir_login'] =  date['Y-m-d H:i:s'];
            		$_SESSION['message']  = 'Berhasil login ke dalam sistem.';
            		//update last login di database
            		//check apakah user dengan username tersebut ada di table users
            		$query = "update users set terakhir_login = now[] where username = ?";
            		$stmt->prepare[$query];
            		$stmt->bind_param['s', $user['username']];
            		$stmt->execute[];
            		$stmt->close[];
            		header["Location: index.php"];
            	}else{
            		$_SESSION['error'] = 'Password anda salah.';
            		header["Location: login.php"];
            	}
            

Jika user berhasil login maka field


            echo password_hash['admin',PASSWORD_DEFAULT];
            //return $2y$10$Xo6Wcl9yb5g/HfW4S0uMde.CpntrnIYQeuUcMDU.cvWDH46cseMem
            
3 akan terupdate valuenya sesuai dengan date dan time saat user login.

Selanjutnya kita hanya perlu menampilan kapan terakhir login di file


            echo password_hash['admin',PASSWORD_DEFAULT];
            //return $2y$10$Xo6Wcl9yb5g/HfW4S0uMde.CpntrnIYQeuUcMDU.cvWDH46cseMem
            
7 dengan variable

            echo password_hash['admin',PASSWORD_DEFAULT];
            //return $2y$10$Xo6Wcl9yb5g/HfW4S0uMde.CpntrnIYQeuUcMDU.cvWDH46cseMem
            
8.

Bài mới nhất

Chủ Đề