Membuat login multi level sederhana dengan CodeIgniter 3


   Halo semua, pada kesempatan kali ini saya akan memberikan tutorial singkat mengenai cara membuat login multi level sederhana menggunakan framework codeigniter 3.1.4. Saya akan membuat tutorial ini dengan sesingkat mungkin, agar para pembaca dapat memahaminya dengan mudah.

Disini saya akan mempratikkan menggunakan 3 pengguna yaitu Admin, Member, dan Moderator. Konsepnya adalah, kita akan me-redirect setiap pengguna ke halaman yang berbeda. Jika admin login ke halaman admin, member login ke halaman member, dan moderator login ke halaman moderator. Baiklah, langsung saja ke tutorialnya.

Buat database baru

Disini kita akan membuat database baru dengan nama 'db_multi' dan tabel bernama 'users'. Pada tabel tersebut terdapat 6 kolom yang berisikan id, nama, username, email, password, dan level.

Atau bisa juga dengan import file sql dibawah ini :

-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: 11 Jul 2017 pada 10.56
-- Versi Server: 10.1.16-MariaDB
-- PHP Version: 7.0.9

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `db_multi`
--

-- --------------------------------------------------------

--
-- Struktur dari tabel `users`
--

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `username` varchar(35) NOT NULL,
  `nama` varchar(35) NOT NULL,
  `email` varchar(35) NOT NULL,
  `password` varchar(35) NOT NULL,
  `level` enum('admin','member','moderator') NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data untuk tabel `users`
--

INSERT INTO `users` (`id`, `username`, `nama`, `email`, `password`, `level`) VALUES
(1, 'admin', 'Administrator', '[email protected]', 'admin', 'admin'),
(2, 'member', 'Member web', '[email protected]', 'member', 'member'),
(3, 'moderator', 'moderator web', '[email protected]', 'moderator', 'moderator');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;

Oke, masalah database sudah selesai. Sekarang kita ke CodeIgniternya. Sebelumnya, kamu harus sudah download file CodeIgniternya disini.

Config

Seperti biasa, disana terdapat 3 files yang bernama Application, System dan user_guide, yang akan kita gunakan hanya bagian application dan system saja. Kamu pergi ke Application -> Config -> Config.php. Disini, kamu ubah bagian base urlnya sesuai dengan letak codeigniter kamu diserver.
Selesai di file config, kita pergi ke file yang bernama autoload.php ada beberapa baris kode yang harus di ubah.

$autoload['libraries'] = array('database', 'session');
$autoload['helper'] = array('url', 'form');
$autoload['model'] = array('rafimodel');
Untuk bagian rafimodel, bisa kamu ganti sesuai dengan nama model yang kamu buat. Untuk pembuatan model ada dibawah.
Masih difolder yang sama, kita sekarang edit bagian database.php dan isikan informasi mengenai database yang kamu buat.
Cukup sekian untuk bagian config, sekarang ke bagian selanjutnya.

Controllers

Kita tidak membuat controller baru, melainkan menggunakan controller yang sudah ada yaitu Welcome.php. Berikut ini adalah source codenya :

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {
 public function index()
 {
  $this->load->view('welcome_message');
 }
 function ceklogin(){
  if(isset($_POST['login'])){
   $user = $this->input->post('user',true);
   $pass = $this->input->post('pass',true);
   $cek = $this->rafimodel->proseslogin($user, $pass);
   $hasil = count($cek);
   if($hasil > 0){
    $yglogin = $this->db->get_where('users',array('username'=>$user, 'password' => $pass))->row();
    $data = array('udhmasuk' => true,
      'nama' => $yglogin->nama, 'email' => $yglogin->email, 'username' => $yglogin->username);
    $this->session->set_userdata($data);
    if($yglogin->level == 'admin'){
     redirect('beranda');
    }elseif($yglogin->level == 'moderator'){
     redirect('moderator');
    }elseif($yglogin->level =='member'){
    redirect('member');
    }
   }else{
    redirect('index');
   }
  }
 }
 function beranda(){
  $data["title"] = "Halaman Beranda";
  $this->load->view('beranda', $data);
 }
 function moderator(){
  $data["title"] = "Halaman Moderator";
  $this->load->view('moderator', $data);
 }
 function member(){
  $data["title"] = "Halaman Member";
  $this->load->view('member', $data);
 }
 function keluar(){
  $this->session->sess_destroy();
  redirect('index');
 }
}

Selesai di controller sekarang kita buat modelnya.

Models

Nah disini saya membuat model baru dengan nama 'rafimodel'. Kamu bisa ganti namanya, tapi kamu harus ubah source code yang bernama 'rafimodel' pada controller dan config juga.
Model saya seperti ini :

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Rafimodel extends CI_Model {
 function proseslogin($user, $pass){
  $this->db->where('username',$user);
  $this->db->where('password',$pass);
  return $this->db->get('users')->row();
 }
}
Selesai di models, sekarang kita buat file viewsnya.

Views

Saya tidak merubah views bawaan yaitu 'welcome_message'. Tapi saya ubah beberapa isinya menjadi ada form loginnya.
Source code welcome_message.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <title>Login Multi Level</title>

 <style type="text/css">

 ::selection { background-color: #E13300; color: white; }
 ::-moz-selection { background-color: #E13300; color: white; }

 body {
  background-color: #fff;
  margin: 40px;
  font: 13px/20px normal Helvetica, Arial, sans-serif;
  color: #4F5155;
 }

 a {
  color: #003399;
  background-color: transparent;
  font-weight: normal;
 }

 h1 {
  color: #444;
  background-color: transparent;
  border-bottom: 1px solid #D0D0D0;
  font-size: 19px;
  font-weight: normal;
  margin: 0 0 14px 0;
  padding: 14px 15px 10px 15px;
 }

 code {
  font-family: Consolas, Monaco, Courier New, Courier, monospace;
  font-size: 12px;
  background-color: #f9f9f9;
  border: 1px solid #D0D0D0;
  color: #002166;
  display: block;
  margin: 14px 0 14px 0;
  padding: 12px 10px 12px 10px;
 }

 #body {
  margin: 0 15px 0 15px;
 }

 p.footer {
  text-align: right;
  font-size: 11px;
  border-top: 1px solid #D0D0D0;
  line-height: 32px;
  padding: 0 10px 0 10px;
  margin: 20px 0 0 0;
 }

 #container {
  margin: 10px;
  border: 1px solid #D0D0D0;
  box-shadow: 0 0 8px #D0D0D0;
 }
 </style>
</head>
<body>

<div id="container">
 <h1>Masuk dulu untuk melanjutkan</h1>

 <div id="body">
  <?php echo form_open('welcome/ceklogin')?>
  <input type="text" name="user" placeholder="Masukkan username"/>
  <input type="password" name="pass" placeholder="Masukkan password"/>
  <input type="submit" name="login" value="LOGIN"/>
  <?php echo form_close()?>
 </div>

 <p class="footer">Created with <3 by <a href="https://www.rafipriatna.web.id/">Rafi Priatna.</a></p>
</div>

</body>
</html>
Saya juga membuat file views yang baru untuk halaman pengguna, yaitu beranda, moderator, dan member. Disini saya menggunakan beranda untuk halaman admin.

Source code beranda.php


<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <title><?= $title ?></title>

 <style type="text/css">

 ::selection { background-color: #E13300; color: white; }
 ::-moz-selection { background-color: #E13300; color: white; }

 body {
  background-color: #fff;
  margin: 40px;
  font: 13px/20px normal Helvetica, Arial, sans-serif;
  color: #4F5155;
 }

 a {
  color: #003399;
  background-color: transparent;
  font-weight: normal;
 }

 h1 {
  color: #444;
  background-color: transparent;
  border-bottom: 1px solid #D0D0D0;
  font-size: 19px;
  font-weight: normal;
  margin: 0 0 14px 0;
  padding: 14px 15px 10px 15px;
 }

 code {
  font-family: Consolas, Monaco, Courier New, Courier, monospace;
  font-size: 12px;
  background-color: #f9f9f9;
  border: 1px solid #D0D0D0;
  color: #002166;
  display: block;
  margin: 14px 0 14px 0;
  padding: 12px 10px 12px 10px;
 }

 #body {
  margin: 0 15px 0 15px;
 }

 p.footer {
  text-align: right;
  font-size: 11px;
  border-top: 1px solid #D0D0D0;
  line-height: 32px;
  padding: 0 10px 0 10px;
  margin: 20px 0 0 0;
 }

 #container {
  margin: 10px;
  border: 1px solid #D0D0D0;
  box-shadow: 0 0 8px #D0D0D0;
 }
 </style>
</head>
<body>

<div id="container">
 <h1><?= $title ?> </h1>

 <div id="body">
  Nama     : <?php echo $this->session->userdata('nama') ?></br>
  Username : <?php echo $this->session->userdata('username') ?></br>
  Email    : <?php echo $this->session->userdata('email') ?></br>
  <a href="<?php echo site_url('/keluar') ?>">Keluar</a>
 </div>

 <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo  (ENVIRONMENT === 'development') ?  'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></p>
</div>

</body>
</html>

Source code member.php


<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <title><?= $title ?></title>

 <style type="text/css">

 ::selection { background-color: #E13300; color: white; }
 ::-moz-selection { background-color: #E13300; color: white; }

 body {
  background-color: #fff;
  margin: 40px;
  font: 13px/20px normal Helvetica, Arial, sans-serif;
  color: #4F5155;
 }

 a {
  color: #003399;
  background-color: transparent;
  font-weight: normal;
 }

 h1 {
  color: #444;
  background-color: transparent;
  border-bottom: 1px solid #D0D0D0;
  font-size: 19px;
  font-weight: normal;
  margin: 0 0 14px 0;
  padding: 14px 15px 10px 15px;
 }

 code {
  font-family: Consolas, Monaco, Courier New, Courier, monospace;
  font-size: 12px;
  background-color: #f9f9f9;
  border: 1px solid #D0D0D0;
  color: #002166;
  display: block;
  margin: 14px 0 14px 0;
  padding: 12px 10px 12px 10px;
 }

 #body {
  margin: 0 15px 0 15px;
 }

 p.footer {
  text-align: right;
  font-size: 11px;
  border-top: 1px solid #D0D0D0;
  line-height: 32px;
  padding: 0 10px 0 10px;
  margin: 20px 0 0 0;
 }

 #container {
  margin: 10px;
  border: 1px solid #D0D0D0;
  box-shadow: 0 0 8px #D0D0D0;
 }
 </style>
</head>
<body>

<div id="container">
 <h1><?= $title ?> </h1>

 <div id="body">
  Nama     : <?php echo $this->session->userdata('nama') ?></br>
  Username : <?php echo $this->session->userdata('username') ?></br>
  Email    : <?php echo $this->session->userdata('email') ?></br>
  <a href="<?php echo site_url('/keluar') ?>">Keluar</a>
 </div>

 <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo  (ENVIRONMENT === 'development') ?  'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></p>
</div>

</body>
</html>

Source code moderator.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <title><?= $title ?></title>

 <style type="text/css">

 ::selection { background-color: #E13300; color: white; }
 ::-moz-selection { background-color: #E13300; color: white; }

 body {
  background-color: #fff;
  margin: 40px;
  font: 13px/20px normal Helvetica, Arial, sans-serif;
  color: #4F5155;
 }

 a {
  color: #003399;
  background-color: transparent;
  font-weight: normal;
 }

 h1 {
  color: #444;
  background-color: transparent;
  border-bottom: 1px solid #D0D0D0;
  font-size: 19px;
  font-weight: normal;
  margin: 0 0 14px 0;
  padding: 14px 15px 10px 15px;
 }

 code {
  font-family: Consolas, Monaco, Courier New, Courier, monospace;
  font-size: 12px;
  background-color: #f9f9f9;
  border: 1px solid #D0D0D0;
  color: #002166;
  display: block;
  margin: 14px 0 14px 0;
  padding: 12px 10px 12px 10px;
 }

 #body {
  margin: 0 15px 0 15px;
 }

 p.footer {
  text-align: right;
  font-size: 11px;
  border-top: 1px solid #D0D0D0;
  line-height: 32px;
  padding: 0 10px 0 10px;
  margin: 20px 0 0 0;
 }

 #container {
  margin: 10px;
  border: 1px solid #D0D0D0;
  box-shadow: 0 0 8px #D0D0D0;
 }
 </style>
</head>
<body>

<div id="container">
 <h1><?= $title ?> </h1>

 <div id="body">
  Nama     : <?php echo $this->session->userdata('nama') ?></br>
  Username : <?php echo $this->session->userdata('username') ?></br>
  Email    : <?php echo $this->session->userdata('email') ?></br>
  <a href="<?php echo site_url('/keluar') ?>">Keluar</a>
 </div>

 <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo  (ENVIRONMENT === 'development') ?  'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></p>
</div>

</body>
</html> 
Saya juga memberikan source code untuk projek ini gratis.


Sekian tutorial yang dapat saya berikan, semoga bermanfaat. Mohon maaf jika penulisan kodenya tidak rapih dan tidak efisien. Saya pun masih belajar di CodeIgniter.

4 Comments

Bagus artikelnya mas, nanti saya coba untuk belajar..
terus berkarya.!

what kind of server that u use......i try to open it but object not found....i'm using xammp btw.

I'm Using Linux WAMP. Object not found (maybe) because you didn't change base url.

Silahkan bebas berkomentar disini. Jangan nyepam link aktif, dan harap gunakan kata yang sopan.
EmoticonEmoticon