• Tidak ada hasil yang ditemukan

Web Programming with Codeigniter Framework

N/A
N/A
Protected

Academic year: 2022

Membagikan "Web Programming with Codeigniter Framework"

Copied!
94
0
0

Teks penuh

(1)

Web Programming with Codeigniter Framework

2020

MEMBUAT WEB DENGAN FRAMEWORK CODEIGNITER

STUDI KASUS SISTEM INFORMASI PERPUSTAKAAN

| Gunawan Budi Sulistyo, M.Kom

(2)

1

DAFTAR ISI

Daftar Isi ... 0

BAB 1 Framework codeigniter/ CI ... 3

1.1 Instalasi Codeigniter ... 3

1.1.1 Download Codeigniter ... 3

1.1.2 Extrak dan Install Codeiniter Framework ... 3

1.1.3 Konfigurasi Base URL Codeigniter ... 4

1.1.4 Pengujian Codeigniter ... 4

1.2 Pengertian MVC ... 4

1.3 Framework CodeIgniter ... 4

1.4 Uri Segment Codeigniter ... 5

BAB 2 Controller Codeigniter... 5

2.1 Mengenal Controller pada Codeigniter ... 5

BAB 3 Studi Kasus Perpustakaan ... 6

3.1 Sistem Informasi Perpustakaan ... 6

3.1.1 Analisa Sistem ... 6

3.2 Setting base URL ... 8

3.3 Membuat database dengan phpMyAdmin ... 9

3.4 Membuat table ... 10

3.5 Koneksi Database CodeIgniter dengan MySQL ... 10

3.6 Membuat Model untuk Table... 11

3.7 Mengintegrasikan Codeigniter dengan Bootstrap SB Admin ... 12

3.7.1 Modifikasi Template perpustakaan ... 13

BAB 4 Membuat Form Login ... 15

(3)

2

4.1 Mempersiapkan halaman login ... 15

4.2 Membuat halaman Admin dan Logout ... 19

4.2.1 Membuat halaman ganti password ... 20

4.2.2 Membuat halaman Admin ... 32

BAB 5 Membangun CRUD data buku ... 44

5.1 Menampilkan data buku ... 44

5.2 Input Data... 47

5.3 Update data Buku ... 50

5.4 Delete Data Buku ... 52

BAB 6 Transaksi Peminjaman Buku ... 52

6.1 Data Transaksi Peminjaman ... 53

6.2 Input Peminjaman Baru ... 61

6.3 Pembatalan Pinjaman ... 65

6.4 Status Pinjaman Selesai ... 67

BAB 7 Dashboard admin... 77

7.1 Cetak Kartu Anggota Pada Admin ... 79

7.2 Menampilkan Data Buku Pada Halaman Admin ... 81

7.3 Menampilkan & Cetak Laporan Peminjaman Pada Admin ... 83

BAB 8 Membuat Ringkasan Pada Dashboard... 87

8.1 Ringkasan Pada Dashboard Admin ... 87

8.2 Ringkasan Pada Dashboard Petugas ... 89

8.2.1 GLOSARIUM ... 91

8.2.2 INDEKS... 92

8.2.3 REFERENSI ... 92

(4)

3

BAB 1 FRAMEWORK CODEIGNITER/ CI

1.1 Instalasi Codeigniter 1.1.1 Download Codeigniter

Download CodeIgniter melalui situs resmi https://www.codeigniter.com/download , versi terbaru saat buku ini ditulis CodeIgniter 3.1.10 (Rocks, 2019), yang merupakan versi yang paling stabil dibanding dengan versi sebelumnya.

Gambar 1. Download source codeigniter 1.1.2 Extrak dan Install Codeiniter Framework

Setelah file berhasil didownload, maka selanjutnya adalah mengekstrak file tersebut kedalam sebuah forlder root yaitu di htdocs, sedangkan untuk system operasi linux di folder www/html.

Gambar 2. Ekstrak file CodeIgniter-3.1.10.zip

(5)

4 1.1.3 Konfigurasi Base URL Codeigniter

Setelah melakukan instalasi codeigniter maka dilanjutkan dengan mengkonfigurasi base url yang terdapat di folder application/config/config.php dengan teks editor kesayangan kita masing-masing, sebagai contoh kita gunakan sublime text.

Kemudian pada bagian ini :

$config['base_url'] = '';

Dirubah menjadi seperti dibawah ini

$config['base_url'] = 'http://localhost/ciperpust';

1.1.4 Pengujian Codeigniter

Setelah semua tahap dilewati,silahkan buka browser dan ketikkan http://localhost/ciperpust, jika berhasil akan keluar tampilan seperti dinawah ini :

Gambar 3 Tampilan pertama CodeIgniter 1.2 Pengertian MVC

Model View Controller atau yang lebih dikenal dengan MVC merupakan konsep pembangunan dan pengembangan software maupun aplikasi menggunakan bahasa pemrograman. MVC membagi kedalam 3 pekerjaan dengan proses Model membawa Data dari Database sehingga dikelola oleh Controller yang selanjutnya dibawa ke View untuk menampilkan data baik yang akan maupun sudah diproses.

1.3 Framework CodeIgniter

Framework Codeigniter merupakan aplikasi software opensource dengan MVC (Model, View, Controller) yang merupakan susunan dari script program berbasis PHP, digunakan untuk membangun web dinamis. Codeigniter dibuat sebagai alat untuk mempermudah dan mempercepat pekerjaan developer web, dengan tetap

(6)

5

memperkuat system keamanan didalamnya. Codeigniter dirilis pertamakali tanggal 28 February 2006, yang mana pengembangan terus dilakukan guna meningkatkan kinerja Framework tersebut.

1.4 Uri Segment Codeigniter

URI merupakan akronim dari Uniform Resource Identifier, yang membantu mengambil data melalui url codeigniter. Pemanggilan uri segment pada igniter pada segment 1, segment 2, segment 3 dan seterusnya. Setiap url pada codeigniter terdapat index.php yang dilanjutkan dengan nama class codeigniter. Segment 1 pada codeigniter merupakan nama class atau controller yang sedang dijalankan. Segment 2 merrupakan nama method atau function pada class/controller. Sedangkan segment 3 merupakan data yang berbentuk id yang dikirim. Berikut adalah contoh url

1 http://localhost/ciperpust/index.php/booking/codeigniter/1

Penjelasan dari url diatas adalah

 segment 1 = booking

 segment 2 = codeigniter

 segment 3 = 1

BAB 2 CONTROLLER CODEIGNITER

2.1 Mengenal Controller pada Codeigniter

Controller merupakan kumpulan intruksi aksi yang menghubungkan model dan view, jadi user tidak akan berhubungan dengan model secara langsung, intinya data yang tersimpan di database (model) di ambil oleh controller dan kemudian controller pula yang menampilkan nya ke view. Jadi controller lah yang mengolah intruksi.

Dari penjelasan tentang model view dan controller di atas dapat di simpulkan bahwa controller sebagai penghubung view dan model. misalnya pada aplikasi yang menampilkan data dengan menggunakan metode konsep mvc, controller memanggil intruksi pada model yang mengambil data pada database, kemudian controller yang meneruskannya pada view untuk di tampilkan. jadi jelas sudah dan sangat

(7)

6

mudah.dalam pengembangan aplikasi dengan cara mvc ini karena web designer atau front-end developer tidak perlu lagi berhubungan dengan controller, dia hanya perlu berhubungan dengan view untuk mendesign tampilann aplikasi, karena back-end developer yang menangani bagian controller dan modelnya. Jadi pembagian tugas pun menjadi mudah dan pengembangan aplikasi dapat di lakukan dengan cepat dan terstruktur.

BAB 3 STUDI KASUS PERPUSTAKAAN

3.1 Sistem Informasi Perpustakaan

Sistem informasi perpustakaan merupakan kumpulan berbagai system yang terpadu, yang menyediakan bebagai sumberdaya, termasuk, administrator, pengelola, buku, majalah dan pengguna, untuk mengakses kebutuhan mencari sumber referensi yang dijadikan sebagai landasan keilmuan.

3.1.1 Analisa Sistem A. Analisa Proses

1) Pendataan buku

Petugas perpustakaan melakukan pendataan buku yang tersedia didalam perpustakaan beserta dengan kode buku, judul buku, pengarang, penerbit dan jumlah buku, kedalam database.

2) Pendaftaran Anggota

Petugas perrpustakaan memberi formulir anggota kepada calon anggota perpustakaan. Setelah formulir diisi lengkap, calon anggota mengembalikan formulir tersebut kepada petugas perpustakaan, yang selanjutnya dibuatkan kartu anggota perpustakaan.

3) Proses Peminjman Buku

Anggota memilih buku yang akan dipinjam, kemudian anggota menyerahkan kartu Anggota, kartu pinjaman dan buku yang akan dipinjam. Petugas perpustakaan kemudian memeriksa buku peminjaman, jika ada peminjaman buku maka peminjaman ditolak dan jika tidak ada peminjaman buku maka petugas perpustakaan mencatat data peminjaman kebuku peminjaman, setelah itu petugas perpustakaan menyerahkan buku dan kartu peminjaman kepada anggota.

4) Proses Pengembalian buku

(8)

7

Anggota perpustakaan menyerahkan buku yang hendak dikembalikan kepada petugas perpustakaan. Petugas perpustakaan mengecek tanggal pengembalian buku. Bila anggota mengembalikan buku tepat waktu, petugas perpustakaan mencatat pengembalian buku pada buku besar. Bila anggota perpustakaan terlambat mengembalikan buku, petugas perpustakaan memberikan peringatan kemudian mencatat tanggal pengembalian pada buku besar. Kemudian petugas perpustakaan menyerahkan kartu anggota dan kartu peminjaman.

5) Proses pembuatan laporan

Secara berkala petugas membuat laporan peminjaman, pengembalian dan denda kepada kepala perpustakaan.

B. Activity Diagram 1) Pendataan buku

Kepala Perpustakaan Petugas Perpustakaan

Gambar 4. Activity Diagram Pendataan Buku Serahkan Data

Buku

Terima Data Buku

Entry data buku ke database

(9)

8 2) Pendaftaran Anggota

Petugas Perpustakaan Calon Anggota

3.2 Setting base URL

Pengaturan base url adalah pengaturan URL dasar dalam sebuah project aplikasi yang dibuat dengan menggunakan codeigniter. Pengaturan base url di codeigniter terdapat di dalam file config.php di dalam folder project codeigniter.

perpust/application/config/config.php Memberikan formulir aggota

Terima Formulir anggota

Isi formulir calon anggota

Serahkan formulir yang telah diisi Terima formulir

yang telah diisi

Entry data formulir ke database

Cetak kartu anggota

Terima kartu anggota

(10)

9

Codeigniter memiliki helper dan library yang dapat kita gunakan untuk mempercepat pembuatan program, dengan hanya memanggil fungsinya. Bahkan kita dapat membuat helper dan library sendiri sesuai dengan kebutuhan.

Pada buku ajar kali ini, kita akan menggunakan beberapa helper dan library codeigniter yang dibutuhkan dalam membuat aplikasi perpustakaan.

Library yang akan kita load secara otomatis adalah database, session dan form_validation.

Dari sintak baris ke 61,

$autoload['libraries'] = array();

Tambahkan database, session dan form_validation. Sehingga menjadi seperti berikut:

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

Sedangkan helper yang akan kita load secara otomatis adalah url di baris 92:

$autoload['helper'] = array('');

Kemudian tambahkan “url” (karena kita hanya membutuhkan helper url disini).

Maka akan menjadi seperti berikut.

$autoload['helper'] = array('url');

3.3 Membuat database dengan phpMyAdmin

Perpustakaan Digital merupakan suatu organisasi yang menyediakan sumber- sumber, termasuk staf-staf ahli, untuk memilih, menyusun, menawarkan akses intelektual, menterjemahkan, mendistribusikan, memelihara integritas koleksi- koleksi dari pekerjaan-pekerjaan digital sehingga mereka tersedia secara cepat dan ekonomis untuk digunakan/dimanfaat-kan olehkomunitas tertentu atau kumpulan komunitas.(Intan Komala Dewi P, Kusrini, 2014)

Buka browser dan ketik url http://localhost/phpmyadmin, setelah itu buatlah database untuk system booking perpustakaan dengan nama db_ciperpust.

Selanjutnya kita akan membuat table admin, anggota, buku, detail_pinjam, kategori, peminjaman dan transaksi.

(11)

10 3.4 Membuat table

Adapun nama dan struktur masing-masing table dapat dilihat pada gambar dibawah ini :

Gambar 5. Struktur table dari database db_ciperpust

3.5 Koneksi Database CodeIgniter dengan MySQL

Pengaturan koneksi database pada Codeigniter, terdapat pada file folder config/database.php yang di konfigurasi agar dapat terkoneksi.

$db['default'] = array(

'dsn' => '',

'hostname' => 'localhost', 'username' => 'root', 'password' => '',

'database' => 'perpust', 'dbdriver' => 'mysqli',

Perhatikan script diatas, sesuaikan dengan username, password dan database kita masing-masing.

(12)

11

Setelah itu kita juga harus mengkonfigurasi file autoload.php, pada folder yang sama, untuk ditambahkan database dansession disana.

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

3.6 Membuat Model untuk Table

Model merupakan class atau kode yang berhubungan dengan data.Di dalam model, kita akan membuat pemodelan data dari database. Sehingga kita akan lebih mudah mengaksesnya. Biasanya satu tabel, dibuatkan satu modelnya.

Kita akan membuat model dengan nama M_perpus.php, yang harus diperhatikan adalah pemberian nama harus diawali dengan huruf besar, agar tidak akan menyalahi aturan penggunaan codeigniter yang benar dan akan terjadi trouble saat diupload dihosting.

M_perpust.php

<?php

defined('BASEPATH') or exit('No direct Script access allowed');

class M_perpus extends CI_Model {

function edit_data($where,$table){

return $this->db->get_where($table,$where);

}

function get_data($table){

return $this->db->get($table);

}

function insert_data($data,$table){

$this->db->insert($table,$data);

}

function update_data($table,$data,$where){

$this->db->update($table,$data,$where);

}

function delete_data($where,$table){

$this->db->where($where);

$this->db->delete($table);

} } ?>

Dengan model seperti diatas kita dapat dapat menggunakan untuk berbagai keperluan, yakni input yang diwakili oleh insert_data(), read menggunakan fuction get_data(), delete untuk menghapus data dari database kita bisa menggunakan

(13)

12

function delete_data() dan dan untuk mengupdate data pada database kita bisa menggunakan function update_data(). Selanjutnya kita akan mengatur autoload model di application/config/autoload.php. agar model m_rental di load secara otomatis. Jadi tidak perlu lagi kita load dari controller. Pada kode baris ke 135 yang semula $autoload['model'] = array();

Menjadi $autoload['model'] = array('M_perpus');

3.7 Mengintegrasikan Codeigniter dengan Bootstrap SB Admin

Aplikasi perpustakaan yang akan dibuat kali ini menggunakan Bootstrap template SB Admin yang mudah diimplementasikan pada Codeigniter. SB Admin dapat didownload pada laman https://startbootstrap.com/templates/sb-admin/

Gambar 6. Tampilan SB Admin

Setelah berhasil mengunduh SB Admin, kita tinggal extract file tersebut, kemudian

Kita tinggal copy/paste file dan folder yang dibutuhkan. Berikut ini folder yang harus kita copy:

1. Folder css

2. Folder js

3. Folder vendor–rename menjadi–> assets

(14)

13

Untuk folder vendor, kita akan ubah namanya menjadi assetsagar tidak bercampur dengan folder vendordari composer.

3.7.1 Modifikasi Template perpustakaan

Mari kita buat direktori baru kedalam direktori views dengan nama admin, yang didalamnya ada kode php dengan nama overview.php.

File overview.php ini akan dijadikan sebagai home admin, sedangkan isi kode overview.php diambil dari overview.php.

Berikut isi dari overview.php

<!DOCTYPE html>

<html lang="en">

<head>

<?php $this->load->view("admin/_partials/head.php") ?>

</head>

<body id="page-top">

<?php $this->load->view("admin/_partials/navbar.php") ?>

<div id="wrapper">

<?php $this->load->view("admin/_partials/sidebar.php") ?>

<div id="content-wrapper">

<div class="container-fluid">

<!--

karena ini halaman overview (home), kita matikan partial breadcrumb.

Jika anda ingin mengampilkan breadcrumb di halaman overview, silahkan hilangkan komentar (//) di tag PHP di bawah.

-->

<?php //$this->load->view("admin/_partials/breadcrumb.php") ?>

<!-- Icon Cards-->

<div class="row">

<div class="col-xl-3 col-sm-6 mb-3">

<div class="card text-white bg-primary o-hidden h-100">

<div class="card-body">

<div class="card-body-icon">

<i class="fas fa-fw fa-comments"></i>

</div>

<div class="mr-5">26 New Messages!</div>

</div>

<a class="card-footer text-white clearfix small z- 1" href="#">

<span class="float-left">View Details</span>

<span class="float-right">

<i class="fas fa-angle-right"></i>

</span>

</a>

</div>

</div>

(15)

14

<div class="col-xl-3 col-sm-6 mb-3">

<div class="card text-white bg-warning o-hidden h-100">

<div class="card-body">

<div class="card-body-icon">

<i class="fas fa-fw fa-list"></i>

</div>

<div class="mr-5">11 New Tasks!</div>

</div>

<a class="card-footer text-white clearfix small z- 1" href="#">

<span class="float-left">View Details</span>

<span class="float-right">

<i class="fas fa-angle-right"></i>

</span>

</a>

</div>

</div>

<div class="col-xl-3 col-sm-6 mb-3">

<div class="card text-white bg-success o-hidden h-100">

<div class="card-body">

<div class="card-body-icon">

<i class="fas fa-fw fa-shopping-cart"></i>

</div>

<div class="mr-5">123 New Orders!</div>

</div>

<a class="card-footer text-white clearfix small z- 1" href="#">

<span class="float-left">View Details</span>

<span class="float-right">

<i class="fas fa-angle-right"></i>

</span>

</a>

</div>

</div>

<div class="col-xl-3 col-sm-6 mb-3">

<div class="card text-white bg-danger o-hidden h-100">

<div class="card-body">

<div class="card-body-icon">

<i class="fas fa-fw fa-life-ring"></i>

</div>

<div class="mr-5">13 New Tickets!</div>

</div>

<a class="card-footer text-white clearfix small z- 1" href="#">

<span class="float-left">View Details</span>

<span class="float-right">

<i class="fas fa-angle-right"></i>

</span>

</a>

</div>

</div>

</div>

<!-- Area Chart Example-->

<div class="card mb-3">

<div class="card-header">

<i class="fas fa-chart-area"></i>

Visitor Stats</div>

<div class="card-body">

<canvas id="myAreaChart" width="100%"

height="30"></canvas>

(16)

15

</div>

<div class="card-footer small text-muted">Updated yesterday at 11:59 PM</div>

</div>

</div>

<!-- /.container-fluid -->

<!-- Sticky Footer -->

<?php $this->load->view("admin/_partials/footer.php") ?>

</div>

<!-- /.content-wrapper -->

</div>

<!-- /#wrapper -->

<?php $this->load->view("admin/_partials/scrolltop.php") ?>

<?php $this->load->view("admin/_partials/modal.php") ?>

<?php $this->load->view("admin/_partials/js.php") ?>

</body>

</html>

BAB 4 MEMBUAT FORM LOGIN

4.1 Mempersiapkan halaman login

Pada studi kasus kali ini, halaman utama perpustakaan adalah halaman login, sehingga pengguna harus login terlebih dahulu dengan mengisikan username dan password. Agar password sulit ditebak, maka dibutuhkan enkripsi yang sering digunakan yakni MD5. Untuk itu kita buka http://localhost/phpmyadmin yang dilanjtukan dengan memilih database perpust, kemudian pilih table admin.

Gambar 7. Contoh input data administrator dengan MD5

(17)

16

Skenario dari formlogin yang akan dibuat kali ini adalah, ketika web pertama diakses maka user dalam hal ini admin langsung diarahkan ke form login. Pada pembahasan diatas sudah dijelaskan bahwa secara default pada Codeigniter yang pertama diakses adalah Welcome.php. untuk itu kita perlu merubah defaultnya di application/config/routes.php. atau bisa dirubah langsung menggunakan controller Welcome.php sebagai controller defaultnya. Berikut merrupakan kode atau syntax dari controller Welcome.php.

<?php

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

class Welcome extends CI_Controller { function __construct(){

parent::__construct();

}

public function index() {

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

}

public function login(){

$username = $this->input->post('admin_username');

$password = $this->input->post('admin_password');

$this->form_validation-

>set_rules('admin_username','Username','required');

$this->form_validation-

>set_rules('admin_password','Password','required');

if($this->form_validation->run() != false){

$where = array('username'=>$username, 'password'=>md5($password));

$data = $this->M_perpus->edit_data($where,'admin');

$d = $this->M_perpus->edit_data($where,'admin')->row();

$cek = $data->num_rows();

if($cek > 0) {

$session = array('id' => $d->id_admin,'nama' => $d-

>nama_admin,'status' =>'login', 'posisi'=>'admin');

$this->session->set_userdata($session);

redirect(base_url().'admin');

} else{

$dt = $this->M_perpus->edit_data($where, 'anggota');

$hasil = $this->M_perpus->edit_data($where, 'anggota')->row();

$proses = $dt->num_rows();

if($proses > 0){

(18)

17

$session = array('id_agt' => $hasil-

>id_anggota, 'nama_agt' => $hasil->nama_anggota, 'status' => 'login');

$this->session->set_userdata($session);

redirect(base_url().'member');

} else {

$this->session->set_flashdata('alert','Login Gagal!

Username atau Password Salah');

redirect(base_url());

} }

}

else{

$this->session->set_flashdata('alert','Anda Belum mengisi username atau password');

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

} }

}

Pada syntax Welcome.php function construct yang perrtama kali dijalankan yang dilanjutnkan dengan index(). Selanjutnta pada

public function index() {

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

}

dibuat perintah untuk membuka view login. Syntax $this->load->view() adalah perintah untuk menampilkan view (tampilan). Di sini kita memerintahkan untuk menampilkan view login (login.php). ekstensi .php nya tidak perlu lagi kita tuliskan saat memanggil view.

Pada saat controller welcome dijalankan, otomatis function index juga dijalankan, dan akan menampilkan halaman login (view login.php). Karena pada function index kita ingin menampilkan view login.php, maka sekarang kita buat dulu view login.php nya.

Application/view/login.php

<!DOCTYPE html>

<html lang="en" dir="ltr">

<head>

<meta charset="utf-8">

<title>LOGIN - Aplikasi E-Library</title>

<link rel="stylesheet" type="text/css" href="<?php echo base_url().'assets/css/bootstrap.css' ?>">

(19)

18

<script type="text/javascript" src="<?php echo base_url().'assets/js/jquery.js'; ?>"></script>

<script type="text/javascript" src="<?php echo base_url().'assets/js/bootstrap.js'; ?>"></script>

</head>

<body>

<div class="col-md-4 col-md-offset-4" style="margin-top:50px">

<center>

<h2>APLIKASI PERPUSTAKAAN</h2>

<h3>LOGIN</h2>

</center>

<br>

<?php

if(isset($_GET['pesan'])){

if($_GET['pesan']=="gagal"){

echo "<div class='alert alert-danger alert-danger'>";

echo $this->session->flashdata('alaert');

echo "</div>";

} else if($_GET['pesan']=='logout'){

if($this->session->flashdata()) {

echo "<div class='alert alert-danger alert-success'>";

echo $this->session->flashdata('Anda telah logout');

echo "</div>";

}

}else if($_GET['pesan']=='Belum Login'){

if($this->session->flashdata()) {

echo "<div class='alert alert-danger alert-primary'>";

echo $this->session->flashdata('alert');

echo "</div>";

} } }else{

if($this->session->flashdata()) {

echo "<div class='alert alert-danger alert-message'>";

echo $this->session->flashdata('alert');

echo "</div>";

} } ?>

<br>

<div class="panel panel-default">

<div class="panel-body">

<br><br>

<form method="post" action="<?php echo base_url().'welcome/login' ?>">

<div class="form-group">

<input type="text" name="admin_username"

placeholder="username" class="form-control">

<?php echo form_error('username'); ?>

</div>

<div class="form-group">

<input type="password" name="admin_password"

placeholder="password" class="form-control">

<?php echo form_error('password'); ?>

</div>

<div class="form-group">

<input type="submit" value="Login" class="btn btn- primary">

(20)

19

</div>

</form>

<br><br>

</div>

</div>

</div>

<script type="text/javascript">

$('.alert-message').alert().delay(3000).slideUp('slow');

</script>

</body>

</html>

Pertama kita menangkap data yang dikirim dari form. Dan kita tetapkan validasinya, bahwa username dan password harus wajib di isi (required), kemudian kita cek validasinya. Jika tidak ada masalah, kita cek username dan password yang diinput sesuai atau tidak dengan username dan password pada tabel admin. Jika sesuai maka kita buat session id, dan nama. Yang mana session id kita simpan id admin yang melakukan login, session nama kita menyimpan nama admin yang login.

Setelah dibuat sessionnya, maka selanjutnya mengalihkan halamannya ke controller admin. Karena controller admin ini yang akan dijadikan sebagai halaman admin.

Jika login gagal maka dialihkan ke controller welcome kembali. Yang mana halaman login ada di controller welcome. Sambil mengirimkan pesan melalui url untuk membuat pesan notifikasi bahwa login gagal.

Jika pesannya adalah logout, maka akan di tampilkan “anda telah logout“. Jika pesannya adalah “belumlogin”. Maka akan di tampilkan notifikasi “silahkan login dulu”. Sampai di sini, sistem login belum rampung 100%, karena belum menyiapkan halaman admin. Oleh sebab itu kita akan membuat dan menyiapkan halaman admin dulu. Baru setelah itu kita coba apakah login sudah berjalan sebagai mana yang kita perintahkan atau belum.

4.2 Membuat halaman Admin dan Logout

Setelah berhasil membuat login, selanjutnya kita akan membuat logout. Atau link keluar dari sistem. Perhatikan pada menu logout pada view header.php. kita telah membuat link menu logout.

<li><a href="<?php echo base_url().'admin/logout'; ?>"><span class="glyphicon glyphicon-log-out"></span>Logout</a></li>

(21)

20

Link logout di atas, mengarahkan ke function/method logout di controller admin.

Oleh karena itu kita akan membuat function logout pada controller admin.

function logout(){

$this->session->sess_destroy();

redirect(base_url().'welcome?pesan=logout');

}

Syntax $this->session->sess_destroy(); merupakan fungsi codeigniter untuk menghapus semua session. Setelah menghapus session, kita alihkan halaman ke halaman login. Sekarang coba klik pada menu logtout. Maka halaman akan dialihkan kembali ke halaman login.

4.2.1 Membuat halaman ganti password

Selanjutnya akan dibuat sebuah fitur untuk admin, yaitu fitur untuk mengganti password. Perhatikan pada menu ganti password di header admin. Kita telah membuatkan link menu untuk mengganti password. Dimana link tersebut sudah kita arahkan ke function ganti_password di controller admin.

<li><a href="<?php echo base_url().'admin/ganti_password' ?>"><i class="glyphicon glyphicon-lock"></i>Ganti Password</a></li>

Disini kita akan membuat sebuah function baru di controller admin, yaitu function ganti_password(). Tambahkan function/syntax berikut pada controller admin.php.

Application/controller/Admin.php

function ganti_password(){

$this->load->view('admin/header');

$this->load->view('admin/ganti_password');

$this->load->view('admin/footer');

}

Seperti yang terlihat pada function di atas, kita menampilkan view header.php, view ganti_password.php dan view footer.php. pada view ganti_password.php akan kita buat form untuk mengganti password. Selanjutnya kita buat file view baru dengan nama ganti_password.php. dalam folder admin dalam view.

Application/view/admin/ganti_password.php

<div class="page-header">

<h3>Ganti Password</h3>

</div>

<div class="row">

<div class="col-md-6 col-md-offset-3">

<?php

if(isset($_GET['pesan'])){

if($_GET['pesan']=="berhasil"){

(22)

21

echo "<div class='alert alert-success'>Password Berhasil diganti.</div>";

} } ?>

<form action="<?php echo base_url().'admin/ganti_password_act' ?>"

method="post">

<div class="form-group">

<label>Password Baru</label>

<input type="password" class="form-control" name="pass_baru">

<?php echo form_error('pass_baru'); ?>

</div>

<div class="form-group">

<label>Ulangi Password Baru</label>

<input type="password" class="form-control" name="ulang_pass">

<?php echo form_error('ulang_pass'); ?>

</div>

<div class="form-group">

<input class="btn btn-primary btn-sm" type="submit" value="Simpan">

</div>

</form>

</div>

</div>

Aksi dari form ini akan di jalankan pada function ganti_password_act pada controller admin.

<form action="<?php echo base_url().'admin/ganti_password_act' ?>"

method="post">

Selanjutnya buat function ganti_password_act() pada controller admin.

Application/controllers/Admin.php

<?php

defined('BASEPATH') or exit('No direct script access allowed');

class Admin extends CI_Controller {

function __construct() {

parent::__construct();

//cek Login

if($this->session->userdata('status') != "login"){

redirect(base_url().'welcome?pesan=belumlogin');

} }

function index(){

$data['transaksi'] = $this->db->query("select * from peminjaman order by id_pinjam desc limit 10")->result();

$data['anggota'] = $this->db->query("select * from anggota order by id_anggota desc limit 10")->result();

(23)

22

$data['buku'] = $this->db->query("select * from buku order by id_buku desc limit 10")->result();

if($this->session->userdata('posisi')!='admin'){

redirect(base_url('member'));

}else{

$this->load->view('admin/header');

$this->load->view('admin/index',$data);

$this->load->view('admin/footer');

} }

function logout(){

$this->session->sess_destroy();

redirect(base_url().'welcome?pesan=logout');

}

function ganti_password(){

$this->load->view('admin/header');

$this->load->view('admin/ganti_password');

$this->load->view('admin/footer');

}

function ganti_password_act(){

$pass_baru = $this->input->post('pass_baru');

$ulang_pass = $this->input->post('ulang_pass');

$this->form_validation->set_rules('pass_baru','Password Baru','required|matches[ulang_pass]');

$this->form_validation->set_rules('ulang_pass','Ulangi Password Baru','required');

if($this->form_validation->run() != false){

$data = array('password' =>md5($pass_baru));

$w = array('id_admin' => $this->session->userdata('id'));

$this->M_perpus->update_data($w,$data,'admin');

redirect(base_url().'admin/ganti_password?pesan=berhasil');

}else{

$this->load->view('admin/header');

$this->load->view('admin/ganti_password');

$this->load->view('admin/footer');

} }

function buku(){

$data

['anggota'] = $this->m_perpus->get_data('anggota')->result();

$this->load->view('admin/header');

$this->load->view('admin/buku',$data);

$this->load->view('admin/footer');

}

function tambah_buku(){

$data['kategori'] = $this->M_perpus->get_data('kategori')->result();

$this->load->view('admin/header');

$this->load->view('admin/tambahbuku',$data);

$this->load->view('admin/footer');

}

function tambah_buku_act(){

$tgl_input = date('Y-m-d');

$id_kategori = $this->input->post('id_kategori');

$judul = $this->input->post('judul_buku');

(24)

23

$pengarang = $this->input->post('pengarang');

$penerbit = $this->input->post('penerbit');

$thn_terbit = $this->input->post('thn_terbit');

$isbn = $this->input->post('isbn');

$jumlah_buku = $this->input->post('jumlah_buku');

$lokasi = $this->input->post('lokasi');

$status = $this->input->post('status');

$this->form_validation-

>set_rules('id_kategori','Kategori','required');

$this->form_validation->set_rules('judul_buku','Judul Buku','required');

$this->form_validation->set_rules('status','Status Buku','required');

if($this->form_validation->run() != false){

//configurasi upload Gambar

$config['upload_path'] = './assets/upload/';

$config['allowed_types'] = 'jpg|png|jpeg';

$config['max_size'] = '2048';

$config['file_name'] = 'gambar'.time();

$this->load->library('upload',$config);

if($this->upload->do_upload('foto')){

$image = $this->upload->data();

$data = array(

'id_kategori' => $id_kategori, 'judul_buku' => $judul,

'pengarang' => $pengarang, 'penerbit' => $penerbit, 'thn_terbit' => $thn_terbit, 'isbn' => $isbn,

'jumlah_buku' => $jumlah_buku, 'lokasi' => $lokasi,

'gambar' => $image['file_name'], 'tgl_input' => $tgl_input,

'status_buku' => $status );

$this->M_perpus->insert_data($data,'buku');

redirect(base_url().'admin/buku');

}else{

$this->load->view('admin/header');

$this->load->view('admin/tambahbuku');

$this->load->view('admin/footer');

} } }

function hapus_buku($id){

$where = array('id_buku' => $id);

$this->M_perpus->delete_data($where,'buku');

redirect(base_url().'admin/buku');

}

function edit_buku($id){

$where = array('id_buku' =>$id);

$data['buku'] = $this->db->query("select * from buku B, kategori K where B.id_kategori=K.id_kategori and B.id_buku='$id'")->result();

$data['kategori'] =$this->M_perpus->get_data('kategori')->result();

$this->load->view('admin/header');

$this->load->view('admin/editbuku',$data);

(25)

24

$this->load->view('admin/footer');

}

function update_buku(){

$id = $this->input->post('id');

$id_kategori = $this->input->post('id_kategori');

$judul = $this->input->post('judul_buku');

$pengarang = $this->input->post('pengarang');

$penerbit = $this->input->post('penerbit');

$thn_terbit = $this->input->post('thn_terbit');

$isbn = $this->input->post('isbn');

$jumlah_buku = $this->input->post('jumlah_buku');

$lokasi = $this->input->post('lokasi');

$status = $this->input->post('status');

$this->form_validation->set_rules('id_kategori','ID Kategori','required');

$this->form_validation->set_rules('judul_buku','Judul Buku','required|min_length[4]');

$this->form_validation-

>set_rules('pengarang','Pengarang','required|min_length[4]');

$this->form_validation-

>set_rules('penerbit','Penerbit','required|min_length[4]');

$this->form_validation->set_rules('thn_terbit','Tahun Terbit','required|min_length[4]');

$this->form_validation->set_rules('isbn','Nomor ISBN','required|numeric');

$this->form_validation->set_rules('jumlah_buku','Jumlah Buku','required|numeric');

$this->form_validation->set_rules('lokasi','Lokasi Buku','required|min_length[4]');

$this->form_validation->set_rules('status','Status Buku','required');

if($this->form_validation->run() != false){

$config['upload_path'] = './assets/upload/';

$config['allowed_types'] = 'jpg|png|jpeg';

$config['max_size'] = '2048';

$config['file_name'] = 'gambar'.time();

$this->load->library('upload',$config);

$where = array('id_buku' => $id);

$data = array(

'id_kategori' =>$id_kategori, 'judul_buku' =>$judul,

'pengarang' =>$pengarang, 'penerbit' =>$penerbit, 'thn_terbit' =>$thn_terbit, 'isbn' =>$isbn,

'jumlah_buku' =>$jumlah_buku, 'lokasi' =>$lokasi,

'gambar' =>$image['file_name'], 'status_buku' =>$status

);

if($this->upload->do_upload('foto')){

//proses upload Gambar

$image = $this->upload->data();

unlink('assets/upload/'.$this->input->post('old_pict',TRUE));

$data['gambar'] = $image['file_name'];

(26)

25

$this->M_perpus->update_data('buku',$data,$where);

} else{

$this->M_perpus->update_data('buku',$data,$where);

}

$this->M_perpus->update_data('buku',$data,$where);

redirect(base_url().'admin/buku');

} else{

$where = array('id_buku' =>$id);

$data['buku'] = $this->db->query("select * from buku B, kategori K where B.id_kategori=K.id_kategori and B.id_buku='$id'")-

>result();

$data['kategori'] = $this->M_perpus->get_data('kategori')-

>result();

$this->load->view('admin/header');

$this->load->view('admin/editbuku',$data);

$this->load->view('admin/footer');

} }

function anggota(){

$data['anggota'] = $this->M_perpus->get_data('anggota')->result();

$this->load->view('admin/header');

$this->load->view('admin/anggota',$data);

$this->load->view('admin/footer');

}

function tambah_anggota(){

$this->load->view('admin/header');

$this->load->view('admin/tambahanggota');

$this->load->view('admin/footer');

}

function tambah_anggota_act(){

$nama_anggota = $this->input->post('nama_anggota');

$gender = $this->input->post('gender');

$no_telp = $this->input->post('no_telp');

$alamat = $this->input->post('alamat');

$email = $this->input->post('email');

$password = $this->input->post('password');

$this->form_validation->set_rules('nama_anggota','Nama Anggota','required');

$this->form_validation->set_rules('no_telp','No.Telpon','required');

$this->form_validation->set_rules('alamat','Alamat','required');

$this->form_validation->set_rules('email','Email','required');

$this->form_validation->set_rules('password','Password','required');

if($this->form_validation->run() != false){

$data = array(

'nama_anggota' => $nama_anggota, 'gender' => $gender,

'no_telp' => $no_telp, 'alamat' => $alamat, 'email' => $email,

'password' => $password, );

$this->M_perpus->insert_data($data,'anggota');

redirect(base_url().'admin/anggota');

}else{

$this->load->view('admin/header');

$this->load->view('admin/tambahanggota');

$this->load->view('admin/footer');

(27)

26

} }

function edit_anggota($id){

$where = array('id_anggota' =>$id);

$data['anggota'] = $this->db->query("select * from anggota where id_anggota='$id'")->result();

$this->load->view('admin/header');

$this->load->view('admin/editanggota',$data);

$this->load->view('admin/footer');

}

function update_anggota(){

$id = $this->input->post('id');

$nama_anggota = $this->input->post('nama_anggota');

$gender = $this->input->post('gender');

$penerbit = $this->input->post('penerbit');

$no_telp = $this->input->post('no_telp');

$alamat = $this->input->post('alamat');

$email = $this->input->post('email');

$password = $this->input->post('password');

$this->form_validation->set_rules('nama_anggota','Nama Anggota','required');

$this->form_validation-

>set_rules('no_telp','No.Telpon','required');

$this->form_validation->set_rules('alamat','Alamat','required');

$this->form_validation->set_rules('email','Email','required');

$this->form_validation-

>set_rules('password','Password','required');

if($this->form_validation->run() != false){

$where = array('id_anggota' => $id);

$data = array(

'nama_anggota' => $nama_anggota, 'gender' => $gender,

'no_telp' => $no_telp, 'alamat' => $alamat, 'email' => $email,

'password' => $password, );

$this->M_perpus->update_data('anggota',$data,$where);

redirect(base_url().'admin/anggota');

} else{

$where = array('id_anggota' =>$id);

$data['anggota'] = $this->db->query("select * from anggota where id_anggota='$id'")->result();

$this->load->view('admin/header');

$this->load->view('admin/editanggota',$data);

$this->load->view('admin/footer');

} }

function peminjaman(){

$data['peminjaman'] = $this->M_perpus->get_data('peminjaman')-

>result();

$this->load->view('admin/header');

$this->load->view('admin/peminjaman',$data);

(28)

27

$this->load->view('admin/footer');

}

function tambah_peminjaman(){

$w = array('status_buku'=>'1');

$data['buku'] = $this->M_perpus->edit_data($w,'buku')->result();

$data['anggota'] = $this->M_perpus->get_data('anggota')->result();

$data['peminjaman'] = $this->M_perpus->get_data('transaksi')-

>result();

$this->load->view('admin/header');

$this->load->view('admin/tambah_peminjaman',$data);

$this->load->view('admin/footer');

}

function tambah_peminjaman_act(){

$tgl_pencatatan = date('Y-m-d H:i:s');

$anggota = $this->input->post('anggota');

$buku = $this->input->post('buku');

$tgl_pinjam = $this->input->post('tgl_pinjam');

$tgl_kembali = $this->input->post('tgl_kembali');

$denda = $this->input->post('denda');

$this->form_validation->set_rules('anggota','Anggota','required');

$this->form_validation->set_rules('buku','Buku','required');

$this->form_validation->set_rules('tgl_pinjam','Tanggal Pinjam','required');

$this->form_validation->set_rules('tgl_kembali','Tanggal Kembali','required');

$this->form_validation->set_rules('denda','Denda','required');

if($this->form_validation->run() != false){

$data = array(

'tgl_pencatatan' => $tgl_pencatatan, 'id_anggota' => $anggota,

'id_buku' => $buku,

'tgl_pinjam' => $tgl_pinjam, 'tgl_kembali' => $tgl_kembali, 'denda' => $denda,

'tgl_pengembalian' => '0000-00-00', 'total_denda' => '0',

'status_pengembalian' =>'0', 'status_peminjaman' =>'0' );

$this->M_perpus->insert_data($data,'transaksi');

$d = array('status_buku' =>'0','tgl_input' =>

substr($tgl_pencatatan,0,10));

$w = array('id_buku' => $buku);

$this->M_perpus->update_data('buku',$d,$w);

redirect(base_url().'admin/peminjaman');

}else{

$w = array('status_buku' => '1');

$data['buku'] = $this->M_perpus->edit_data($w,'buku')-

>result();

$data['anggota'] = $this->M_perpus->get_data('anggota')-

>result();

$this->load->view('admin/header');

$this->load->view('admin/tambah_peminjaman',$data);

$this->load->view('admin/footer');

} }

(29)

28

function transaksi_hapus($id){

$w = array('id_pinjam' => $id);

$data = $this->M_perpus->edit_data($w,'peminjaman')->row();

$ww = array('id_buku' => $data->id_buku);

$data2 = array('status_buku' => '1');

$this->M_perpus->update_data('buku',$data2,$ww);

$this->M_perpus->delete_data($w,'transaksi');

redirect(base_url().'admin/peminjaman');

}

function transaksi_selesai($id){

$data['buku'] = $this->M_perpus->get_data('buku')->result();

$data['anggota'] = $this->M_perpus->get_data('anggota')-

>result();

$data['peminjaman'] = $this->db->query("select * from peminjaman p, detail_pinjam d, anggota a, buku b where d.id_buku = b.id_buku and

p.id_anggota=a.id_anggota and p.id_pinjam=d.id_pinjam and p.id_pinjam='$id' limit 1")->result();

$this->load->view('admin/header');

$this->load->view('admin/transaksi_selesai',$data);

$this->load->view('admin/footer');

}

function transaksi_selesai_act(){

$id = $this->input->post('id');

$tgl_dikembalikan = $this->input->post('tgl_dikembalikan');

$tgl_kembali = $this->input->post('tgl_kembali');

$buku = $this->input->post('buku');

$denda = $this->input->post('denda');

$this->form_validation->set_rules('tgl_dikembalikan','Tanggal dikembalkan','required');

if($this->form_validation->run() !=false){

//hitung selisih hari

$batas_kembali = strtotime($tgl_kembali);

$dikembalikan = strtotime($tgl_dikembalikan);

$selisih = abs(($dikembalikan-$batas_kembali)/(60*60*24));

$total_denda = $denda*$selisih;

//update status Peminjaman

$data = array('status_peminjaman' => 'Selesai','totaldenda' =>

$total_denda,'tgl_pengembalian' => $tgl_dikembalikan,'status_pengembalian'

=> 'Kembali');

$w = array('id_pinjam' =>$id);

$this->M_perpus->update_data('peminjaman',$data,$w);

//update status Buku

$data2 = array('status_buku' => '1');

$w2 = array('id_buku' => $buku);

$this->M_perpus->update_data('buku',$data2,$w2);

//echo $total_denda;

redirect(base_url().'admin/peminjaman');

}else{

$data['buku'] = $this->M_perpus->get_data('buku')->result();

$data['anggota'] = $this->M_perpus->get_data('anggota')-

>result();

$data['peminjaman'] = $this->db->query("select * from peminjaman p, anggota a, detail_pinjam d, buku b where p.id_anggota = a.id_anggota and p.id_pinjam=d.id_pinjam and d.id_buku=b.id_buku and p.id_pinjam='$id'")->result();

(30)

29

$this->load->view('admin/header');

$this->load->view('admin/transaksi_selesai',$data);

$this->load->view('admin/footer');

} }

function cetak_laporan_buku(){

$data['buku'] = $this->M_perpus->get_data('buku')->result();

$this->load->view('admin/header');

$this->load->view('admin/laporan_buku', $data);

$this->load->view('admin/footer');

}

function laporan_print_buku(){

$data['buku'] = $this->M_perpus->get_data('buku')->result();

$this->load->view('admin/laporan_print_buku',$data);

}

function laporan_pdf_buku(){

$this->load->library('dompdf_gen');

$data['buku'] = $this->M_perpus->get_data('buku')->result();

$this->load->view('admin/laporan_pdf_buku', $data);

$paper_size = 'A4'; // ukuran kertas

$orientation = 'landscape'; //tipe format kertas potrait atau landscape

$html = $this->output->get_output();

$this->dompdf->set_paper($paper_size, $orientation);

//Convert to PDF

$this->dompdf->load_html($html);

$this->dompdf->render();

$this->dompdf->stream("laporan_data_buku.pdf", array('Attachment'=>0));

// nama file pdf yang di hasilkan }

Function cetak_laporan_anggota(){

$data['anggota'] = $this->M_perpus->get_data('anggota')-

>result();

$this->load->view('admin/header');

$this->load->view('admin/laporan_anggota', $data);

$this->load->view('admin/footer');

}

function laporan_print_anggota(){

$data['anggota'] = $this->M_perpus->get_data('anggota')-

>result();

$this->load->view('admin/laporan_print_anggota',$data);

}

function laporan_pdf_anggota(){

$this->load->library('dompdf_gen');

$data['anggota'] = $this->M_perpus->get_data('anggota')-

>result();

$this->load->view('admin/laporan_pdf_anggota', $data);

(31)

30

$paper_size = 'A4'; // ukuran kertas

$orientation = 'landscape'; //tipe format kertas potrait atau landscape

$html = $this->output->get_output();

$this->dompdf->set_paper($paper_size, $orientation);

//Convert to PDF

$this->dompdf->load_html($html);

$this->dompdf->render();

$this->dompdf->stream("laporan_data_anggota.pdf", array('Attachment'=>0));

// nama file pdf yang di hasilkan }

function laporan_transaksi(){

$dari = $this->input->post('dari');

$sampai = $this->input->post('sampai');

$this->form_validation->set_rules('dari','Dari Tanggal','required');

$this->form_validation->set_rules('sampai','Sampai Tanggal','required');

if($this->form_validation->run() != false){

$data['laporan'] = $this->db->query("select * from peminjaman p,detail_pinjam d,

buku b,anggota a where d.id_buku=b.id_buku and p.id_anggota=a.id_anggota

and p.id_pinjam=d.id_pinjam and date(tanggal_input) >= '$dari'")-

>result();

$this->load->view('admin/header');

$this->load->view('admin/laporan_filter_transaksi',$data);

$this->load->view('admin/footer');

}else{

$this->load->view('admin/header');

$this->load->view('admin/laporan_transaksi');

$this->load->view('admin/footer');

} }

function laporan_print_transaksi(){

$dari = $this->input->get('dari');

$sampai = $this->input->get('sampai');

if($dari != "" && $sampai != ""){

$data['laporan'] = $this->db->query("select * from peminjaman p,detail_pinjam d,buku b,anggota a where d.id_buku=b.id_buku and

p.id_anggota=a.id_anggota and p.id_pinjam=d.id_pinjam and date(tanggal_input) >= '$dari'")->result();

$this->load->view('admin/laporan_print_transaksi',$data);

}else{

redirect("admin/laporan_transaksi");

} }

function laporan_pdf_transaksi(){

$this->load->library('dompdf_gen');

$dari = $this->input->get('dari');

$sampai = $this->input->get('sampai');

Gambar

Gambar  1. Download source codeigniter  1.1.2  Extrak dan Install Codeiniter Framework
Gambar  3 Tampilan pertama CodeIgniter  1.2  Pengertian MVC
Gambar  4. Activity Diagram Pendataan Buku Serahkan Data
Gambar  5.  Struktur table dari database db_ciperpust
+4

Referensi

Dokumen terkait

Penelitian ini menggunakan metode Naïve Bayes Classifier dan Model View Controller yang diimplementasikan dengan framework codeigniter sehingga menghasilkan sebuah sistem

Penelitian ini menggunakan metode Naïve Bayes Classifier dan Model View Controller yang diimplementasikan dengan framework codeigniter sehingga menghasilkan sebuah sistem

The Zend Framework also provides a complete implementation of the Model-View- Controller (MVC) pattern, which allows application business logic to be separated from the user

Framework CodeIgniter menggunakan konsep MVC (Model, View, Controller). Dengan mengunakan konsep MVC akan memiliki keuntungan yaitu pada pengembangan aplikasi yang berskala besar

Sistem informasi absensi yang baru ini menggunakan konsep MVC (Model View Controller) dengan bahasa program PHP berbasis framework yaitu CodeIgniter serta basis data

Kelebihan lainnya Framework CodeIgniter menggunakan konsep Model, View, Controller (MVC) sehingga lebih mudah untuk tahap pengembangan dan maintenance website

Framework CodeIgniter adalah framework dengan konsep model MVC ( Model, View, Controller ) untuk membangun website dinamis dengan menggunakan PHP. CodeIgniter memudahkan

Well, our model is covered, but now we need to test that the controller action handles a web request, creates the proper objects for the view, and then renders the view.. That is,