Membuat Form Login dan Register dengan Codeigniter 4 - gallangsdw/login-with-CodeIgniter4-1800016063 GitHub Wiki

Hallo Gallang disini, dan ini adalah langkah-langkah Membuat form login dan Register dengan CodeIgniter 4. Dari beberapa Framework PHP, Codeigniter merupakan salah satu framework yang paling sering dipakai. Codeigniter adalah framework untuk menciptakan dan mengembangkan situs atau aplikasi dengan cepat yang berbasis MVC (Model-View-Controller). Ketika seorang pengguna melakukan permintaan untuk suatu resource, controller yang akan memberi respon pertama. “Controller” akan memahami permintaan pengguna dan melakukan permintaan data yang diperlukan dari “Model”. Oke langsung saja kita ke langkah yang pertama,

Persiapan dan Instalasi

untuk instalasi sebenarnya ada 2 cara yaitu melalui composer atau mendownload secara mandiri, pada kali ini saya akan mendownload secara mandiri melalui website codeigniter di https://codeigniter.com/download seperti gambar dibawah ini

download CI

kemudian ekstrak hasil download tadi lalu pindahkan ke folder C:\xampp\htdocs, jangan lupa hidupkan XAMPP terlebih dahulu. jika sudah bisa kita buka folder tadi di text editor kesayangan anda, kali ini saya menggunakan visual studio code. jika sudah, mari kita coba jalankan codeIgniter tersebut melalui cmd atau terminal yang ada di visual studio code.

spark

jika berhasil maka http:/localhost:8080 akan menjadi seperti dibawah ini

tes CI

oke, jika sudah berhasil mari kita buat database yang kita butuhkan nantinya, buka localhost/phpmyadmin/ kemudian mari kita buat databasenya, saya membuat database dengan nama praktikum dengan nama tabel users dan struktur tabelnya seperti berikut

db

Agar tidak terjadi error, saya sarankan tidak menggunakan primary key pada kolom id karena pada saat register kita tidak menginputkan id

kemudian mari kita konfigurasi environment dengan mengubah nama file yang sebelumnya env menjadi .env kemudian ubahlah kodenya menjadi seperti dibawah ini, untuk konfigurasi database silahkan sesuaikan dengan database masing-masing

#--------------------------------------------------------------------
# ENVIRONMENT
#--------------------------------------------------------------------

CI_ENVIRONMENT = development

#--------------------------------------------------------------------
# APP
#--------------------------------------------------------------------

# app.baseURL = ''
# app.forceGlobalSecureRequests = false

# app.sessionDriver = 'CodeIgniter\Session\Handlers\FileHandler'
# app.sessionCookieName = 'ci_session'
# app.sessionSavePath = NULL
# app.sessionMatchIP = false
# app.sessionTimeToUpdate = 300
# app.sessionRegenerateDestroy = false

# app.cookiePrefix = ''
# app.cookieDomain = ''
# app.cookiePath = '/'
# app.cookieSecure = false
# app.cookieHTTPOnly = false

# app.CSRFProtection  = false
# app.CSRFTokenName   = 'csrf_test_name'
# app.CSRFCookieName  = 'csrf_cookie_name'
# app.CSRFExpire      = 7200
# app.CSRFRegenerate  = true
# app.CSRFExcludeURIs = []

# app.CSPEnabled = false

#--------------------------------------------------------------------
# DATABASE
#--------------------------------------------------------------------

 database.default.hostname = localhost
 database.default.database = praktikum
 database.default.username = root
 database.default.password = 
 database.default.DBDriver = MySQLi

hapus tanda # untuk mengaktifkan perintah

env1 env2

Konfigurasi Controller

Langkah selanjutnya adalah melakukan konfigurasi pada controller dimana sebelumnya file home.php yang memegang control, kini akan kita rubah dimana file users.php yang menjadi controller. silahkan gandakan file home.php dan ubah namanya menjadi users.php dan rubah kodenya menjadi seperti berikut ini

?php namespace App\Controllers;

use App\Models\UserModel;

class Users extends BaseController
{
    public function index()
    {
      echo "<h1>Users</h1>";
    }
}
users awal

dengan kode tersebut maka halaman awal akan berubah menjadi Users dengan cara melakukan konfigurasi router setup dan router definitions pada router.php seperti berikut ini

* --------------------------------------------------------------------
 * Router Setup
 * --------------------------------------------------------------------
 */
$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Users');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true);

/**
 * --------------------------------------------------------------------
 * Route Definitions
 * --------------------------------------------------------------------
 */

// We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', 'Users::index');
rout awal

jika kita cek maka halaman awal http://localhost:8080/ akan berubah seperti berikut ini, selamat anda berhasil melakukan routing dari home.php ke users.php

tes router

Membuat desain UI website dengan bootstrap

Masuk ke folder views dan buat folder baru templates lalu buat file header.php dan footer.php. file header.php akan menjadi header UI pada tampilan login dan dashboard dan file footer.php juga seperti itu. Jika sudah membuat kedua file tersebut didalah folder templates maka langsung meluncur ke https://getbootstrap.com/ untuk membuat desain header dan navbar, kemudian kodenya seperti dibawah ini untuk header dan navbar

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <link rel="stylesheet" href="/assets/css/style.css">
    <title></title>
  </head> 
  <body>
    <?php
      $uri = service('uri');
     ?>
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
      <div class="container">
      <a class="navbar-brand" href="/">Sadewa Kost</a>
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav mr-auto">
          <li class="nav-item <?= ($uri->getSegment(1) == '' ? 'active' : null) ?>">
            <a class="nav-link" href="/">Login</a>
          </li>
          <li class="nav-item <?= ($uri->getSegment(1) == 'register' ? 'active' : null) ?>">
            <a class="nav-link" href="/register">Register</a>
          </li>
        </ul>
        <?php endif; ?>
      </div>
      </div>
    </nav>
header

desain navbar sudah ada, kemudian kita buat file css dengan membuat folder assets didalam folder public. lalu kita buat file style.css dengan kode dibawah ini

body{
    background-color: #e1e1e1;
  }
  .form-wrapper{
    border-radius: 7px;
  }
  .form-wrapper label{
    font-weight: bold;
  }
  .errors li{
    list-style: none;
    width: 100%;
    text-align: center;
  }
  .errors ul{
    padding-left: 0;
    margin-bottom: 0;
  }
  
  @media (max-width: 768px){
    .form-wrapper .text-right{
      text-align: center !important;
    }
  
    .form-wrapper .btn-primary{
      display: block;
      margin: 0 auto;
    }
  }
css 2

Oke jika sudah mari kita kembali ke folder views dan buat file dengan nama login.php. Untuk desainnya sendiri menggunakan bootstrap sehingga kodenya akan seperti ini

<div class="container">
  <div class="row">
    <div class="col-12 col-sm-8 offset-sm-2 col-md-6 offset-md-3 mt-5 pt-3 pb-3 bg-white from-wrapper">
      <div class="container">
        <h3>Login</h3>
        <hr>
        <form class="" action="/" method="post">
          <div class="form-group">
           <label for="email">Email address</label>
           <input type="text" class="form-control" name="email" id="email" value="<?= set_value('email') ?>">
          </div>
          <div class="form-group">
           <label for="password">Password</label>
           <input type="password" class="form-control" name="password" id="password" value="">
          </div>
          <div class="row">
            <div class="col-12 col-sm-4">
              <button type="submit" class="btn btn-primary">Login</button>
            </div>
            <div class="col-12 col-sm-8 text-right">
              <a href="/register">Don't have an account yet?</a>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
login awal

pada gambar screenshot tersebut terdapat script php, hal tersebut berguna untuk alert jika login berhasil, hal ini akan dijelaskan selanjutnya. anda dapat mengabaikannya

setelah membuat halaman login, selanjutnya adalah membuat desain halaman register dengan membuat file register.php didalam folder views. Kodenya seperti berikut

<div class="container">
  <div class="row">
    <div class="col-12 col-sm-8 offset-sm-2 col-md-6 offset-md-3 mt-5 pt-3 pb-3 bg-white from-wrapper">
      <div class="container">
        <h3>Register</h3>
        <hr>
        <form class="" action="/register" method="post">
          <div class="row">
            <div class="col-12 col-sm-6">
              <div class="form-group">
               <label for="firstname">First Name</label>
               <input type="text" class="form-control" name="firstname" id="firstname" value="<?= set_value('firstname') ?>">
              </div>
            </div>
            <div class="col-12 col-sm-6">
              <div class="form-group">
               <label for="lastname">Last Name</label>
               <input type="text" class="form-control" name="lastname" id="lastname" value="<?= set_value('lastname') ?>">
              </div>
            </div>
            <div class="col-12">
              <div class="form-group">
               <label for="email">Email address</label>
               <input type="text" class="form-control" name="email" id="email" value="<?= set_value('email') ?>">
              </div>
            </div>
            <div class="col-12 col-sm-6">
              <div class="form-group">
               <label for="password">Password</label>
               <input type="password" class="form-control" name="password" id="password" value="">
             </div>
           </div>
           <div class="col-12 col-sm-6">
             <div class="form-group">
              <label for="password_confirm">Confirm Password</label>
              <input type="password" class="form-control" name="password_confirm" id="password_confirm" value="">
            </div>
          </div>
          </div>

          <div class="row">
            <div class="col-12 col-sm-4">
              <button type="submit" class="btn btn-primary">Register</button>
            </div>
            <div class="col-12 col-sm-8 text-right">
              <a href="/">Already have an account</a>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
form register

Langkah terakhir adalah membuat footer pada footer.php dalam folder templates dengan kode sebagai berikut, kode tersebut berguna untuk melihat aktivitas pada web tersebut

<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
</body>
</html>
footer

jika desain sudah dibuat maka diinisiasikan ke controller pada Users.php dengan kode sebagai berikut, method index untuk halaman login dan method register untuk halaman register

<?php namespace App\Controllers;

use App\Models\UserModel;

class Users extends BaseController
{
	public function index()
	{
		$data = [];
		helper(['form']);
                echo view('templates/header', $data);
		echo view('login');
		echo view('templates/footer');
	}

        public function register(){
		$data = [];
		helper(['form']);
                echo view('templates/header', $data);
		echo view('register');
		echo view('templates/footer');
	}
}

users register awal

apakah sudah selesai? hohoho tentu saja belum, langkah selanjutnya adalah konfigurasi routes.php agar halaman register dapat terpanggil. sesuaikan kode pada routes.phpseperti dibawah ini

 * --------------------------------------------------------------------
 * Router Setup
 * --------------------------------------------------------------------
 */
$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Users');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true);

/**
 * --------------------------------------------------------------------
 * Route Definitions
 * --------------------------------------------------------------------
 */

// We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', 'Users::index');
$routes->match(['get','post'],'register', 'Users::register');
router regis awal

jika sudah sesuai maka kita coba buka http://localhost:8080/ maka hasilnya akan seperti ini

ui login ui regis

Registrasi Pengguna

Pada bagian kali ini kita akan membuat registrasi pengguna, oke langsung saja menuju users.php pada folder controllers dan ubahlah kodenya menjadi sebagai berikut

public function register(){
		$data = [];
		helper(['form']);

		if ($this->request->getMethod() == 'post') {
			//let's do the validation here
			$rules = [
				'firstname' => 'required|min_length[3]|max_length[20]',
				'lastname' => 'required|min_length[3]|max_length[20]',
				'email' => 'required|min_length[6]|max_length[50]|valid_email|is_unique[users.email]',
				'password' => 'required|min_length[8]|max_length[255]',
				'password_confirm' => 'matches[password]',
			];

			if (! $this->validate($rules)) {
				$data['validation'] = $this->validator;
			}else{
				$model = new UserModel();

				$newData = [
					'firstname' => $this->request->getVar('firstname'),
					'lastname' => $this->request->getVar('lastname'),
					'email' => $this->request->getVar('email'),
					'password' => $this->request->getVar('password'),
				];
				$model->save($newData);
				$session = session();
				$session->setFlashdata('success', 'Successful Registration');
				return redirect()->to('/');

			}
		}

		echo view('templates/header', $data);
		echo view('register');
		echo view('templates/footer');
	}
regis validator

mari kita bedah kode diatas sebentar, disana kita menuliskan script php untuk memasukkan data register pengguna, kemudian dibawahnya kita menuliskan variabel $rules untuk menvalidasi data yang diinputkan seperti minimal huruf pada nama, password, email dll. Jika semua data sudah sesuai dengan variabel $rules maka data tersebutkan akan dikirimkan ke models untuk diolah ke database, nantinya kita akan membuat file UserModel.php sebagai modelsnya. jika berhasil maka setelah register akan didirect ke halaman awal untuk melakukan login.

Setelah itu kita tambahkan script php validation pada file register.php di folder views/templates. Hal ini bertujuan agar data yang diinputkan bisa tervalidasi. Kodenya adalah seperti berikut, silahkan disesuaikan

     <div class="col-12 col-sm-6">
             <div class="form-group">
              <label for="password_confirm">Confirm Password</label>
              <input type="password" class="form-control" name="password_confirm" id="password_confirm" value="">
            </div>
          </div>
          <?php if (isset($validation)): ?>
            <div class="col-12">
              <div class="alert alert-danger" role="alert">
                <?= $validation->listErrors() ?>
              </div>
            </div>
          <?php endif; ?>
          </div>
regis php

lalu kita buat file usermodel.php pada models kemudian tuliskan kodenya sebagai berikut

<?php namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model{
  protected $table = 'users';
  protected $allowedFields = ['firstname', 'lastname', 'email', 'password', 'updated_at'];
  protected $beforeInsert = ['beforeInsert'];
  protected $beforeUpdate = ['beforeUpdate'];

  protected function beforeInsert(array $data){
    $data = $this->passwordHash($data);
    $data['data']['created_at'] = date('Y-m-d H:i:s');

    return $data;
  }

  protected function beforeUpdate(array $data){
    $data = $this->passwordHash($data);
    $data['data']['updated_at'] = date('Y-m-d H:i:s');
    return $data;
  }

  protected function passwordHash(array $data){
    if(isset($data['data']['password']))
      $data['data']['password'] = password_hash($data['data']['password'], PASSWORD_DEFAULT);

    return $data;
  }
usermodel

mari kita lihat kode diatas, disana kita menuliskan protected $table = 'users'; bertujuan bahwa tabel databasae yang diakses adalah users, kemudian pada protected $allowedFields = ['firstname', 'lastname', 'email', 'password', 'updated_at']; bertujuan fields apa saja pada tabel users yang boleh diakses, lalu pada protected $beforeInsert = ['beforeInsert']; dan protected $beforeUpdate = ['beforeUpdate']; berguna untuk meninisialisasi method yang akan kita gunakan dibawahnya. selanjutnya, method beforeInsert berguna untuk memasukkan data saat register, method beforeUpdate digunakan untuk mengupdate data, sedangkan method passwordHash untuk mengenkripsi password

Selanjutnya kita akan menambahkan alert success pada halaman login jika kita berhasil melakukan register, sesuaikan kode seperti dibawah ini pada file login.php

<div class="container">
  <div class="row">
    <div class="col-12 col-sm-8 offset-sm-2 col-md-6 offset-md-3 mt-5 pt-3 pb-3 bg-white from-wrapper">
      <div class="container">
        <h3>Login</h3>
        <hr>
        <?php if (session()->get('success')): ?>
          <div class="alert alert-success" role="alert">
            <?= session()->get('success') ?>
          </div>
        <?php endif; ?>
login php

Jika sudah mari kita coba registrasi

nyoba register

kemudian jika kita klik akan kedirect ke halaman awal dengan alert success

berhasil

kita coba lihat pada database apakah bertambah, dan ternyata benar!

db regis

Login pengguna dan dashboard

Setelah berhasil membuat akun, kini kita akan membuat sistem login dan dashboardnya, yuk langsung kita mulai. buka file users.php kemudian sesuaikan dengan kode dibawah ini

public function index()
	{
		$data = [];
		helper(['form']);


		if ($this->request->getMethod() == 'post') {
			//let's do the validation here
			$rules = [
				'email' => 'required|min_length[6]|max_length[50]|valid_email',
				'password' => 'required|min_length[8]|max_length[255]|validateUser[email,password]',
			];

			$errors = [
				'password' => [
					'validateUser' => 'Email or Password don\'t match'
				]
			];

			if (! $this->validate($rules, $errors)) {
				$data['validation'] = $this->validator;
			}else{
				$model = new UserModel();

				$user = $model->where('email', $this->request->getVar('email'))
											->first();

				$this->setUserSession($user);
				//$session->setFlashdata('success', 'Successful Registration');
				return redirect()->to('dashboard');

			}
		}

		echo view('templates/header', $data);
		echo view('login');
		echo view('templates/footer');
	}

login users

hampir sama dengan method pada register, kita menambahkan variabel ruler untuk menvalidasi email dan password yang digunakan cocok atau tidak, kemudian jika berhasil maka akan dibawa ke halaman dashboard. Kemudian kita lanjut ke halaman login.phpdisini kita akan menambahkan script untuk menvalidasi input data. Kode akan seperti ini

          <div class="form-group">
           <label for="password">Password</label>
           <input type="password" class="form-control" name="password" id="password" value="">
          </div>
          <?php if (isset($validation)): ?>
            <div class="col-12">
              <div class="alert alert-danger" role="alert">
                <?= $validation->listErrors() ?>
              </div>
            </div>
          <?php endif; ?>
          <div class="row">
login

Kemudian buat folder validation dan file userRules.php dan kodenya seperti dibawah ini

<?php
namespace App\Validation;
use App\Models\UserModel;

class UserRules
{

  public function validateUser(string $str, string $fields, array $data){
    $model = new UserModel();
    $user = $model->where('email', $data['email'])
                  ->first();

    if(!$user)
      return false;

    return password_verify($data['password'], $user['password']);
  }
}
userrules

Method validateUser digunakan untuk mevalidasi data input yang dimasukkan dengan yang ada di database, hal ini bisa kita lihat di use App\Models\UserModel; kemudian kita buat file dashboard.php pada folder controllers dengan kode sebagai berikut

<?php namespace App\Controllers;

class Dashboard extends BaseController
{
	public function index()
	{
		$data = [];

		echo view('templates/header', $data);
		echo view('dashboard');
		echo view('templates/footer');
	}

	//--------------------------------------------------------------------

}

jika kita lihat pada file users.php di method index akan didirect ke dashboard.php yang ada di folder controllers yang kodenya ada diatas, sekarang kita buat file dashboard.php pada folder views untuk menampilkan isi dari dashboard. kodenya seperti berikut

<div class="container">
  <div class="row">
    <div class="col-12">
      <h1>Hello, <?= session()->get('firstname') ?></h1>
    </div>
  </div>
</div>
dashboard php

disana ada script php untuk memanggil method session, maka dari itu kita tambahkan terlebih dahulu method session pada file users.php seperti dibawah ini

private function setUserSession($user){
		$data = [
			'id' => $user['id'],
			'firstname' => $user['firstname'],
			'lastname' => $user['lastname'],
			'email' => $user['email'],
			'isLoggedIn' => true,
		];

		session()->set($data);
		return true;
	}

method diatas berguna untuk user yang berhasil login yang nantinya akan dipanggil oleh dashboard, langkah terakhir adalah kita menambahkan kode pada header agar ada perbedaan antar login session dengan user session dengan menambahkan script php pada file header.php seperti berikut

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
      <div class="container">
      <a class="navbar-brand" href="/">Sadewa Kost</a>
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <?php if (session()->get('isLoggedIn')): ?>
        <ul class="navbar-nav mr-auto">
          <li class="nav-item <?= ($uri->getSegment(1) == 'dashboard' ? 'active' : null) ?>">
            <a class="nav-link"  href="/dashboard">Dashboard</a>
          </li>
          <li class="nav-item <?= ($uri->getSegment(1) == 'profile' ? 'active' : null) ?>">
            <a class="nav-link" href="/profile">Profile</a>
          </li>
        </ul>
        <ul class="navbar-nav my-2 my-lg-0">
          <li class="nav-item">
            <a class="nav-link" href="/logout">Logout</a>
          </li>
        </ul>
      <?php else: ?>
header dashboard

script php yang ditambah bertujuan jika user berhasil login atau masuk ke user session dimana header navbar akan berubah. jika berhasil maka setelah login akan seperti dibawah ini

session

Membuat Profile dan update

Profile sendiri akan menggunakan desain dari register namun ada sedikit perbedaan pada button dan field email, jadi langsung saja kita lihat kodenya bagaimana

<div class="container">
  <div class="row">
    <div class="col-12 col-sm8- offset-sm-2 col-md-6 offset-md-3 mt-5 pt-3 pb-3 bg-white from-wrapper">
      <div class="container">
        <h3><?= $user['firstname'].' '.$user['lastname'] ?></h3>
        <hr>
        <?php if (session()->get('success')): ?>
          <div class="alert alert-success" role="alert">
            <?= session()->get('success') ?>
          </div>
        <?php endif; ?>
        <form class="" action="/profile" method="post">
          <div class="row">
            <div class="col-12 col-sm-6">
              <div class="form-group">
               <label for="firstname">First Name</label>
               <input type="text" class="form-control" name="firstname" id="firstname" value="<?= set_value('firstname', $user['firstname']) ?>">
              </div>
            </div>
            <div class="col-12 col-sm-6">
              <div class="form-group">
               <label for="lastname">Last Name</label>
               <input type="text" class="form-control" name="lastname" id="lastname" value="<?= set_value('lastname', $user['lastname']) ?>">
              </div>
            </div>
            <div class="col-12">
              <div class="form-group">
               <label for="email">Email address</label>
               <input type="text" class="form-control" readonly id="email" value="<?= $user['email'] ?>">
              </div>
            </div>
            <div class="col-12 col-sm-6">
              <div class="form-group">
               <label for="password">Password</label>
               <input type="password" class="form-control" name="password" id="password" value="">
             </div>
           </div>
           <div class="col-12 col-sm-6">
             <div class="form-group">
              <label for="password_confirm">Confirm Password</label>
              <input type="password" class="form-control" name="password_confirm" id="password_confirm" value="">
            </div>
          </div>
          <?php if (isset($validation)): ?>
            <div class="col-12">
              <div class="alert alert-danger" role="alert">
                <?= $validation->listErrors() ?>
              </div>
            </div>
          <?php endif; ?>
          </div>
          <div class="row">
            <div class="col-12 col-sm-4">
              <button type="submit" class="btn btn-primary">Update</button>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
profil

perbedaan yang cukup signifikan akan ada pada field email karena disana kita ubah menjadi read-only sehingga user tidak dapat menggantinya, setelah selesai berurusan dengan tampilan viewsnya sekarang beralih ke bagian controllers dan masuk pada file users.php dan buat method untuk profilenya seperti ini

public function profile(){
		
		$data = [];
		helper(['form']);
		$model = new UserModel();

		if ($this->request->getMethod() == 'post') {
			//let's do the validation here
			$rules = [
				'firstname' => 'required|min_length[3]|max_length[20]',
				'lastname' => 'required|min_length[3]|max_length[20]',
				];

			if($this->request->getPost('password') != ''){
				$rules['password'] = 'required|min_length[8]|max_length[255]';
				$rules['password_confirm'] = 'matches[password]';
			}


			if (! $this->validate($rules)) {
				$data['validation'] = $this->validator;
			}else{

				$newData = [
					'id' => session()->get('id'),
					'firstname' => $this->request->getPost('firstname'),
					'lastname' => $this->request->getPost('lastname'),
					];
					if($this->request->getPost('password') != ''){
						$newData['password'] = $this->request->getPost('password');
					}
				$model->save($newData);

				session()->setFlashdata('success', 'Successfuly Updated');
				return redirect()->to('/profile');

			}
		}

		$data['user'] = $model->where('id', session()->get('id'))->first();
		echo view('templates/header', $data);
		echo view('profile');
		echo view('templates/footer');
	}

jika sudah maka kita konfigurasikan pada file routes.php

* Route Definitions
 * --------------------------------------------------------------------
 */

// We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', 'Users::index');
$routes->match(['get','post'],'register', 'Users::register');
$routes->match(['get','post'],'profile', 'Users::profile');

route profil

kode tersebut berguna untuk route dari halaman session ke halaman profile, jika kita coba hasilnya akan seperti ini

profile

Logout

Buat method logout pada file users.php seperti dibawah ini

public function logout(){
		session()->destroy();
		return redirect()->to('/');
	}
logot

script php diatas berguna untuk keluar dari method session dan direct ke halaman login. Sekarang kita konfigurasikan routes.php menjadi seperti dibawah ini

 * --------------------------------------------------------------------
 * Route Definitions
 * --------------------------------------------------------------------
 */

// We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', 'Users::index');
$routes->get('logout', 'Users::logout');
$routes->match(['get','post'],'register', 'Users::register');
$routes->match(['get','post'],'profile', 'Users::profile');

route logout

Mari Kita coba

sekarang mari kita coba dengan membuat akun seperti berikut

hasilnya

contoh conoth login

jika login salah

kalo salah contoh session contoh profil

tampilan database sekarang

db baru

Tentang Penulis

Wiki ini ditulis oleh Gallang Sadewa, beberapa langkah yang disertai dengan screenshot ada yang sedikit berbeda karena ada penyesuaian agar tidak terjadi error

Made with love by @gallangsdw

⚠️ **GitHub.com Fallback** ⚠️