Module Sederhana Login Authentication dan CRUD di Codeigniter 3 dengan Webserver Apache GNU/Linux


Assalamualaikum Wr.Wb...
dengan diberikan nikmat dan rezeki dari Allah SWT, saya Mr.Gagaltotal666 akan
berbagi kepada anda yaitu tentang Module Sederhana Login Authentication
dan CRUD di Codeigniter 3 dengan Webserver Apache GNU/Linux.

sebelum nya saya mengasih contoh di PHP native [disini]
sekarang saya akan mengasih contoh module di framework PHP nya
yaitu yang sering digunakan banyak orang ya benar Codeigniter

oke langsung saja ikuti langkah berikut
back to text editor area....

bahan yang di siapkan yaitu :

- webserver apache/nginx, untuk di OS windows silakan download Xampp
dan Mamp maupun laragon
- PHP 7.2, 7.3, 7.4 package
- Framework Codeigniter 3.11
- Admin LTE Version 3
- Belum Server Side

sistem keamanan :
- SQL Injection, dan bypass login SQL
- XSS
- mohon maaf jika ada keretanan/vlunerability lain nya,
terutama pada saat upload gambar, jika user mentamper sebuah format .jpg
menyusupkan backdoor shell php dan lain-lain.

oke lanjut...
pertama download Framework codeigniter [disini]

setelah download framework nya, buat database
contoh seperti dibawah ini

$ create database login_crud_ci3;

buat table dan beserta column nya

CREATE TABLE `users` (
  `user_id` int NOT NULL,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `email` varchar(50) NOT NULL,
  `nama` varchar(255) NOT NULL,
  `level` varchar(10) DEFAULT NULL
);

CREATE TABLE `biodata` (
  `id_biodata` int NOT NULL,
  `biodata_username_users` varchar(255) NOT NULL,
  `jenis_kelamin` varchar(255) NOT NULL,
  `tempat_lahir` varchar(255) NOT NULL,
  `tanggal_lahir` date NOT NULL,
  `alamat` text NOT NULL,
  `agama` varchar(25) NOT NULL,
  `pekerjaan` varchar(255) NOT NULL,
  `riwayatpendidikan` varchar(255) NOT NULL,
  `telepon` varchar(15) NOT NULL,
  `photo` varchar(255) NOT NULL
);

jika semua sudah, langsung saja buat controller nya
contoh controller yang saya buat

untuk admin
- Biodata_admin.php
- Biodata.php
- Page.php
- User.php

untuk operator
- Biodata.php
- Page.php

di model nya, contoh

model Login akses : Login_model.php

untuk admin
- Admin_model.php
- Biodata_model.php
- User_model.php

untuk operator
- Operator_model.php

ingat yak kalau kamu menggunakan Linux Server
membuat controller dan model di codeigniter 3 harus huruf kapital besar
contoh yang saya buat diatas, jika kecil semua itu akan menyebabkan
Case Sensitif bakal terjadi error nanti
keluar 404 not found (halam tidak ditemukan)

oke lanjut kebagian config
dibagian ini kita setting config.php, database.php, dan autoload.php,
serta route.php ini untuk pemanggilan awal nya

pertama di database.php terlebih dahulu untuk mengkoneksikan
database Mysql ke Codeigniter 3, contoh sebagai berikut

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

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
'dsn' => '',
'hostname' => '127.0.0.1',
'username' => 'root',
'password' => 'password',
'database' => 'login_crud_ci3',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);


untuk di config.php

$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['base_url'] .= "://" . $_SERVER['HTTP_HOST'];
$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']), "", $_SERVER['SCRIPT_NAME']);


selebih nya default..., perintah diatas untuk tidak mengatur lagi url site
contoh misalnya kamu sudah mempunyai domain
website.com/app, masa harus ganti url config lagi ribet

oke lanjut di bagian autoload.php

untuk libraries nya saya menggunakan seperlu nya
contoh sebagai berikut

$autoload['libraries'] = array('database', 'session','encryption','pagination','form_validation');


kemudian dibagian route.php

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

$route['default_controller'] = 'login';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;


nah dibagian ini terutama default controller itu untuk awal mulai nya
bisa di bilang tampilan atau frontend yang mau di tampilkan awal
dibagian 404_override kamu bisa custom sesuai buat 404 kamu di view

oke lanjut...
nah karena saya default controller nya login
kita buat isi controller login nya, contoh seperti ini

<?php
class Login extends CI_Controller{
  function __construct(){
    parent::__construct();
    $this->load->model('login_model');
  }

  function index(){
    // login multi user hanya 2 user : admin dan operator, jika kamu ingin menambahkannya tinggal lanjutkan logika elseif nya
    if($this->session->userdata('username') AND $this->session->userdata('level') === 'admin'){
      redirect('admin/page');
    } elseif($this->session->userdata('username') AND $this->session->userdata('level') === 'operator'){
      redirect('operator/page');
    }

    $this->load->view('login');
  }

  function auth(){
    $username = htmlspecialchars($this->input->post('username', true), ENT_QUOTES);
    // hashing bisa kamu ubah bisa bycrypt, sha1, base64 dll, soalnya saya buat ini hanya untuk kamu yang sedang belajar
    $password = htmlspecialchars(md5($this->input->post('password', true)), ENT_QUOTES);

    $validate = $this->login_model->validate($username,$password);
    if($validate->num_rows() > 0){
        $data  = $validate->row_array();
        $name  = $data['nama_lengkap'];
        $username = $data['username'];
        $level = $data['level'];
        $sesdata = array(
            'nama'      => $name,
            'username'  => $username,
            'level'     => $level,
            'logged_in' => TRUE
        );
        $this->session->set_userdata($sesdata);
        // access login for admin
        if($level === 'admin'){
            redirect('admin/page');

        // access login for operator
      }elseif($level === 'operator'){
            redirect('operator/page');

        // access login salah
        }
      }else{
        echo $this->session->set_flashdata('msg','
        <div class="alert alert-danger alert-dismissable">
                <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
                <h4>  <i class="icon fa fa-times-circle"></i> Login Failed!</h4>
                Username dan password salah senpai T_T...
              </div>
        ');
        redirect('login');
    }
  }

  function logout(){
      $this->session->sess_destroy();
      redirect('login');
  }

}


oke lanjut membuat model untuk Login_model.php
contoh seperti ini

<?php
class Login_model extends CI_Model{

  function validate($username,$password){
    $this->db->where('username',$username);
    $this->db->where('password',$password);
    $result = $this->db->get('users',1);
    return $result;
  }

}


di User_model.php

<?php

class User_model extends CI_Model{
public function getAllUsers()
{
$query = $this->db->get('users');

return $query->result_array();
}

  public function jumlahuser(){
$b = $this->db->query('select * from users');
$hitung_b = $b->num_rows();
return $hitung_b;
}

public function tambahUsers()
{

$data = [
"username" => $this->input->post('username', true),
"nama" => $this->input->post('nama', true),
"email" => $this->input->post('email', true),
"password" => md5($this->input->post('password')),
"level" => $this->input->post('level', true)
];
$data1 = [
"biodata_username_users" => $this->input->post('username', true),
"photo" => $this->input->post('photo', true)
];

$this->db->insert('users', $data);
$this->db->insert('biodata', $data1);
}


public function hapusUser($id)
{
$this->db->where('username', $id);
$this->db->delete('users');
$this->db->where('biodata_username_users', $id);
$this->db->delete('biodata');
}

public function getUsersById($id)
{
return $this->db->get_where('users', ['user_id' => $id])->row_array();
}

public function ubahUser($id)
{
$data = [
"username" => $this->input->post('username', true),
"nama" => $this->input->post('nama', true),
"email" => $this->input->post('email', true),
"level" => $this->input->post('level', true)
];

$this->db->where('user_id', $this->input->post('user_id'));
$this->db->update('users', $data);
}

public function ubahuserpassword($id){
$data = [
"password" => md5($this->input->post('password'))
];

$this->db->where('user_id', $this->input->post('user_id'));
$this->db->update('users', $data);
}

}

?>


di bagian Biodata_model.php

<?php

class Biodata_model extends CI_Model{
public function getAllbiodata()
{
$this->db->select('*');
$this->db->from('biodata');
$this->db->join('users', 'biodata.biodata_username_users = users.username');
$query = $this->db->get();
return $query;
}

  public function jumlahbiodata(){
$c = $this->db->query('select * from biodata');
$hitung_c = $c->num_rows();
return $hitung_c;
}

public function getbiodataid($id)
{
$this->db->select('*');
$this->db->from('biodata');
$this->db->join('users', 'biodata.biodata_username_users = users.username');
$this->db->where('id_biodata',$id);
$query = $this->db->get()->row_array();
return $query;
}

  public function update_biodata($id_biodata,$jk,$tl,$tlh,$alamat,$agama,$kerja,$pendidikan,$tlp,$gambar){
$hsl=$this->db->query("UPDATE biodata set jenis_kelamin='$jk',tempat_lahir='$tl',
tanggal_lahir='$tlh',alamat='$alamat',agama='$agama',pekerjaan='$kerja',riwayatpendidikan='$pendidikan',telepon='$tlp',
photo='$gambar' where id_biodata='$id_biodata'");
return $hsl;
    }

public function update_biodata_tanpa_gambar($id_biodata,$jk,$tl,$tlh,$alamat,$agama,$kerja,$pendidikan,$tlp){
$hsl=$this->db->query("UPDATE biodata set jenis_kelamin='$jk',tempat_lahir='$tl',
tanggal_lahir='$tlh',alamat='$alamat',agama='$agama',pekerjaan='$kerja',riwayatpendidikan='$pendidikan',telepon='$tlp' where id_biodata='$id_biodata'");
return $hsl;
}

}

?>


oke lanjut ke bagian buat dashboard admin
contoh saya disini dashboard nya yaitu Page.php

<?php
class Page extends CI_Controller{
  function __construct(){
    parent::__construct();
    $this->load->model('User_model');
    $this->load->model('Biodata_model');
    if($this->session->userdata('logged_in') !== TRUE){
      redirect('login');
    }
  }

  function index(){
      $data['title'] = 'Dashboard Admin';

      $data['user'] = $this->db->get_where('users', ['username' => $this->session->userdata('username')])->row_array();
      $username = $this->session->userdata('username');
      $data['jumlahuser'] = $this->User_model->jumlahuser();
      $data['jumlahbiodata'] = $this->Biodata_model->jumlahbiodata();

    //Allowing akses to admin only
      if($this->session->userdata('level') === 'admin'){
          $data['judul'] = 'Dashboard Admin';
          $this->load->view('admin/templates/header', $data);
          $this->load->view('admin/templates/navbar', $data);
          $this->load->view('admin/index',$data);
          $this->load->view('admin/templates/footer', $data);

      }else{
          echo "Access Denied";
      }

  }

}


kemudian di bagian tampilan/frontend yaitu letak nya di View
disini saya membuat 2 folder terpisah untuk admin dan operator

sebagai berikut demo contoh Aplikasi Latihan Login dan CRUD








jika operator ingin mengakses dashboard admin,
contoh tampilan nya access denied atau bisa kamu custom
sesuai selera masing-masing







kamu bisa download Source code ini dengan gratis
silakan pelajari module nya, yang dari saya buatkan gratis
untuk kalian semua yang ingin belajar Web developer
dengan codeigniter 3

Download Source Code dibawah ini

Google Drive 1

Google Drive 2

Password Rar : [gagaltotal666]

oke mungkin itu saja mengenai modul sederhana Login dan CRUD
dengan Framework PHP yaitu Codeigniter 3.1.11
kalau ada kesalahan dan kekurangan nya
mohon berikan masukan nya ya

sekian dan semoga bermanfaat...

tutorial selanjutnya akan saya buatkan 
di versi framework PHP laravel 8

Wasalamualaikum Wr.Wb...

Post a Comment

0 Comments