• No results found

ci

N/A
N/A
Protected

Academic year: 2021

Share "ci"

Copied!
112
0
0

Loading.... (view fulltext now)

Full text

(1)

Hands-On Lab

Code Igniter 2.1.0

Created By

: Willy Achmat Fauzi

Lab version

: 1.0

(2)

Contents

OVERVIEW ... 4

BAB 1: KONFIGURASI CODEIGNITER ... 5

Task 1 – Konfigurasi CodeIgniter ... 5

Task 2 – Konfigurasi Tema ... 6

BAB 2: MEMBUAT LAYOUT UTAMA... 8

Task 1 – Membuat Controller ... 8

Task 2 – Membuat View Template ... 8

BAB 3: DATA MODELING ... 23

Task 1 – Membuat Conceptual Data Model ... 23

Task 2 – Relationship pada CDM ... 27

Task 3 – Phisical Data Model ... 31

Task 4 – Generate Script ... 33

Task 5 – Intellisense Pada Netbeans & CodeIgniter ... 36

BAB 4: MANAJEMEN CONTROLLER ... 38

Task 1 – Inhertiance Pada CodeIgniter Controller ... 38

Task 2 – Menampilkan menu secara dinamis ... 39

Task 3 – Clean URL pada XAMPP web server ... 48

BAB 5: PENGATURAN HAK AKSES ... 50

Task 1 – Pembuatan Desain Halaman Login... 50

Task 2 – Redirect ke halaman login ... 53

Task 3 – Mekanisme Login ... 54

Task 4 – Pembatasan Hak Akses (menu) ... 64

BAB 6: CRUD ... 68

Task 1 – Menampilkan Data ... 68

Task 2 – Menambahkan Fitur Pagging ... 73

Task 3 – Insert Data ... 80

Task 4 – Edit Data ... 93

Task 5 – Delete Data ... 99

(3)

BAB 7: BULK ACTION ... 109

BAB 8: PATTERN IMPLEMENTATION ... 110

BAB 9: CODE GENERATION ... 111

(4)

Overview

Pada pelatihan ini difokuskan untuk dapat membuat aplikasi sederhana dengan codeigniter dan power

designer 15 sebagai database modeler.

Objectives

Pada pelatihan ini akan dibahas tentang :

Code Igniter

◦ MVC

◦ Session

◦ Pagging

◦ Authentication

◦ Menu Management

Power Designer

◦ Data Modeling (CDM, PDM)

◦ Code Generation

System Requirements

Perlu disiapkan software berikut untuk dapat mengikuti lab ini:

XAMPP

Power Designer 15

Netbeans 7.1

Code Igniter 2.1

(5)

BAB 1: Konfigurasi CodeIgniter

Pada bab ini akan dibahas bagaimana konfigurasi CodeIgniter yang akan berjalan di web server Apache.

Sebelumnya install terlebih dahulu XAMPP, Power Designer 15 dan Netbeans 7.1.

Task 1 – Konfigurasi CodeIgniter

Download CodeIgniter versi 2.1 pada alamat web:

http://codeigniter.com/downloads/

Setelah itu extract dan pindahkan ke web server pada folder :

C:\xampp\htdocs\training

Buat project baru pada Netbeans :

File -> New Project -> PHP -> PHP Application From Exsisting Source.

Kemudian arahkan source folder ke folder yang telah di-copy-kan source code CodeIgniter.

(6)

Setelah membuat project kita akan melakukan konfigurasi awal untuk CodeIgniter.

File yang harus kita konfigurasi:

config.php, database.php, autoload.php

dan

route.php

,

semua file ini berada di dalam folder yang sama "application/system/config".

config.php

$config['base_url'] = "http://localhost/training/"; $config['encryption_key'] = 'codeignitertraining';

database.php

$db['default']['hostname'] = "localhost"; $db['default']['username'] = "root"; $db['default']['password'] = ""; $db['default']['database'] = "training"; $db['default']['dbdriver'] = "mysql";

autoload.php

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

route.php

$route['default_controller'] = "dashboard";

Dari setting-setting di atas ‘base url’ adalah dimana halaman utama berada, kemudian database adalah

pengaturan koneksi ke database, sedangkan autoload adalah modul-modul apa saja yang

diinisialisasikan di awal program, sehingga tidak perlu tiap kali dibutuhkan dipanggil secara

berulang-ulang. Terakhir adalah ‘default controller’ yaitu fungsi yang pertama dipanggil bila alamat ‘base url’ yang

di set sebelumnya dipanggil.

Task 2 – Konfigurasi Tema

Download tema pada alamat web :

(7)

Buat folder assets pada direktori training.

C:\xampp\htdocs\training\assets

Extract file admin-xhtml, dan pindahkan beberapa direktori ke direktori asset antara lain :

-

css

-

images

-

js

(8)

BAB 2: Membuat Layout Utama

Pada bab ini akan difokuskan untuk membuat layout utama dengan tema yang telah disiapkan

sebelumnya, dan cara mengatur view agar lebih hemat kode dan mudah untuk di maintenance.

Task 1 – Membuat Controller

Sebelumnya kita telah mengatur default_controller pada file route.php. Sehingga controller inilah yang

pertama akan dijalankan saat kita membuka base uri dari web site yang telah kita konfigurasi. Controller

tersebut sebelumnya kita set dengan nama “dashboard”.

Untuk membuat controller sesuai dengan konfigurasi tersebut ikuti langkah-langkah berikut ini :

1. Buat file dengan nama dashboard.php pada direktori “training/applications/controllers/”.

2. Isi file tersebut dengan source code berikut :

dashboard.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class dashboard extends CI_Controller

{ function index(){ echo “Dashboard”; } } ?>

3. Buka halaman http://localhost/training/

Setelah menjalankan langkah tersebut maka pada layar web browser akan di tampilkan teks

“Dashboard” sesuai dengan yang kita tuliskan pada function index di class dashboard.

Task 2 – Membuat View Template

Pada kali kita akan membuat view lebih terorganisasi dengan baik, kode tidak perlu dituliskan secara

berulang-ulang pada controller pada beberapa view yang dipisahkan.

Berikut adalah contoh bila kita load view pada controller bila tema header, content, footer dan menu

dipisahkan.

(9)

Bila ada banyak halaman maka tentunya kita akan menuliskan ulang kode-kode yang sama, seperti

halnya yang terlihat seperti diatas, untuk mengurangi penulisan ulang kode-kode tersebut kita dapat

membuat sebuah Template View yang mengorganisasi semua view yang akan dipanggil. Contoh seperti

pada gambar berikut :

(10)

Seperti yang telah kita ketahui bahwa pada MVC pattern View digunakan sebagai User Interface

(Tampilan) yang terpisah dengan alur proses (rule). Untuk membuat Template View dapat dilakukan

dengan cara:

1. Buat file dengan nama container.php pada direktori “training/applications/views/”.

2. Isi file tersebut dengan source code berikut :

container.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <?php $this->load->view('part/meta'); $this->load->view('part/script'); ?> </head> <body> <?php $this->load->view('part/header'); $this->load->view('part/menu'); $this->load->view($page); $this->load->view('part/footer'); ?> </body> </html>

3. Kemudian buat direktori part pada direktori “training/applications/views/”. Setelah itu buat 5 file

sebagai berikut :

meta.php

script.php

header.php

menu.php

footer.php

4. Dari tema yang telah kita download terdapat file text.html yang berisi satu halaman penuh halaman

web yang telah tertata rapi, seperti pada gambar berikut :

(11)

Buka source code dan kita pisahkan menjadi 5 bagian seperti yang telah kita atur sebelumnya.

Setelah kita pisahkan maka masing-masing file menjadi seperti berikut :

meta.php

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>{{title}}</title>

script.php

<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/screen.css" type="text/css" media="screen" title="default" />

<!--[if IE]>

<link rel="stylesheet" media="all" type="text/css" href="<?php echo base_url(); ?>assets/css/pro_dropline_ie.css" />

<![endif]-->

<!-- jquery core -->

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

<!-- checkbox styling script -->

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

type="text/javascript"></script>

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

<script type="text/javascript"> $(function(){

(12)

$('input').checkBox(); $('#toggle-all').click(function(){ $('#toggle-all').toggleClass('toggle-checked'); $('#mainform input[type=checkbox]').checkBox('toggle'); return false; }); }); </script> <![if !IE 7]>

<!-- styled select box script version 1 -->

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

<script type="text/javascript"> $(document).ready(function() {

$('.styledselect').selectbox({ inputClass: "selectbox_styled" }); });

</script> <![endif]>

<!-- styled select box script version 2 -->

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

<script type="text/javascript"> $(document).ready(function() {

$('.styledselect_form_1').selectbox({ inputClass: "styledselect_form_1" }); $('.styledselect_form_2').selectbox({ inputClass: "styledselect_form_2" }); });

</script>

<!-- styled select box script version 3 -->

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

<script type="text/javascript"> $(document).ready(function() {

$('.styledselect_pages').selectbox({ inputClass: "styledselect_pages" }); });

</script>

<!-- styled file upload script -->

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

<script type="text/javascript" charset="utf-8"> $(function() {

(13)

image: "images/forms/upload_file.gif", imageheight : 29, imagewidth : 78, width : 300 }); }); </script>

<!-- Custom jquery scripts -->

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

<!-- Tooltips -->

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

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.dimensions.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { $('a.info-tooltip ').tooltip({ track: true, delay: 0, fixPNG: true, showURL: false, showBody: " - ", top: -35, left: 5 }); }); </script>

<!-- date picker script -->

<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/datePicker.css" type="text/css" /> <script src="<?php echo base_url(); ?>assets/js/jquery/date.js" type="text/javascript"></script> <script src="<?php echo base_url(); ?>assets/js/jquery/jquery.datePicker.js"

type="text/javascript"></script>

<script type="text/javascript" charset="utf-8"> $(function()

{

// initialise the "Select date" link $('#date-pick')

.datePicker(

// associate the link with a date picker {

createButton:false, startDate:'01/01/2005', endDate:'31/12/2020'

(14)

} ).bind(

// when the link is clicked display the date picker 'click', function() { updateSelects($(this).dpGetSelected()[0]); $(this).dpDisplay(); return false; } ).bind(

// when a date is selected update the SELECTs 'dateSelected',

function(e, selectedDate, $td, state) { updateSelects(selectedDate); } ).bind( 'dpClosed', function(e, selected) { updateSelects(selected[0]); } );

var updateSelects = function (selectedDate) {

var selectedDate = new Date(selectedDate);

$('#d option[value=' + selectedDate.getDate() + ']').attr('selected', 'selected'); $('#m option[value=' + (selectedDate.getMonth()+1) + ']').attr('selected', 'selected'); $('#y option[value=' + (selectedDate.getFullYear()) + ']').attr('selected', 'selected'); }

// listen for when the selects are changed and update the picker $('#d, #m, #y')

.bind( 'change', function() {

var d = new Date( $('#y').val(), $('#m').val()-1, $('#d').val() ); $('#date-pick').dpSetSelected(d.asString()); } );

// default the position of the selects to today var today = new Date();

(15)

updateSelects(today.getTime());

// and update the datePicker to reflect it... $('#d').trigger('change');

}); </script>

<!-- MUST BE THE LAST SCRIPT IN <HEAD></HEAD></HEAD> png fix -->

<script src="<?php echo base_url(); ?>assets/js/jquery/jquery.pngFix.pack.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function(){ $(document).pngFix( ); }); </script>

Untuk link kita tambahkan source code :

<?php echo base_url(); ?>assets/

Hal ini karena css, js dan image kita pindahkan ke direktori assets pada awal konfigurasi, dan

base_url() akan berisi http://localhost/training sehingga kita mendapatkan alamat style dan script

yang benar.

header.php

<div id="page-top-outer"> <!-- Start: page-top --> <div id="page-top"> <!-- start logo --> <div id="logo">

<a href=""><img width="156" height="40" alt="" src="<?php echo base_url(); ?>assets/images/shared/logo.png"></a>

</div>

<!-- end logo -->

<!-- start top-search --> <div id="top-search">

<table border="0" cellpadding="0" cellspacing="0"> <tr>

<td><input type="text" value="Search" onblur="if (this.value=='') { this.value='Search'; }" onfocus="if (this.value=='Search') { this.value=''; }" class="top-search-inp" /></td>

<td>

<select class="styledselect">

<option value=""> All</option> <option value=""> Products</option> <option value=""> Categories</option> <option value="">Clients</option> <option value="">News</option>

(16)

</select> </td> <td>

<input type="image" src="<?php echo base_url(); ?>assets/images/shared/top_search_btn.gif" /> </td> </tr> </table> </div> <!-- end top-search --> <div class="clear"></div> </div> <!-- End: page-top --> </div> <div class="clear">&nbsp;</div>

menu.php

<div class="nav-outer-repeat"> <!-- start nav-outer --> <div class="nav-outer"> <!-- start nav-right --> <div id="nav-right"> <div class="nav-divider">&nbsp;</div>

<div class="showhide-account active"><img width="93" height="14" alt="" src="<?php echo base_url(); ?>assets/images/shared/nav/nav_myaccount.gif"></div>

<div class="nav-divider">&nbsp;</div>

<a id="logout" href=""><img width="64" height="14" alt="" src="<?php echo base_url(); ?>assets/images/shared/nav/nav_logout.gif"></a>

<div class="clear">&nbsp;</div> <!-- start account-content -->

<div class="account-content" style="display: none;"> <div class="account-drop-inner">

<a id="acc-settings" href="">Settings</a> <div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-details" href="">Personal details </a> <div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-project" href="">Project details</a> <div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div> <a id="acc-inbox" href="">Inbox</a> <div class="clear">&nbsp;</div> <div class="acc-line">&nbsp;</div>

(17)

<a id="acc-stats" href="">Statistics</a> </div> </div> <!-- end account-content --> </div> <!-- end nav-right --> <!-- start nav --> <div class="nav"> <div class="table">

<ul class="select"><li><a href="#nogo"><b>Dashboard</b><!--[if IE 7]><!--></a><!--<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]--> <div class="select_sub">

<ul class="sub">

<li><a href="#nogo">Dashboard Details 1</a></li> <li><a href="#nogo">Dashboard Details 2</a></li> <li><a href="#nogo">Dashboard Details 3</a></li> </ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]--> </li>

</ul>

<div class="nav-divider">&nbsp;</div>

<ul class="current"><li><a href="#nogo"><b>Products</b><!--[if IE 7]><!--></a><!--<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]--> <div class="select_sub show">

<ul class="sub">

<li><a href="#nogo">View all products</a></li>

<li class="sub_show"><a href="#nogo">Add product</a></li> <li><a href="#nogo">Delete products</a></li>

</ul> </div>

<!--[if lte IE 6]></td></tr></table></a><![endif]--> </li>

</ul>

<div class="nav-divider">&nbsp;</div>

<ul class="select"><li><a href="#nogo"><b>Categories</b><!--[if IE 7]><!--></a><!--<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]--> <div class="select_sub">

(18)

<li><a href="#nogo">Categories Details 1</a></li> <li><a href="#nogo">Categories Details 2</a></li> <li><a href="#nogo">Categories Details 3</a></li> </ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]--> </li>

</ul>

<div class="nav-divider">&nbsp;</div>

<ul class="select"><li><a href="#nogo"><b>Clients</b><!--[if IE 7]><!--></a><!--<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]--> <div class="select_sub">

<ul class="sub">

<li><a href="#nogo">Clients Details 1</a></li> <li><a href="#nogo">Clients Details 2</a></li> <li><a href="#nogo">Clients Details 3</a></li> </ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]--> </li>

</ul>

<div class="nav-divider">&nbsp;</div>

<ul class="select"><li><a href="#nogo"><b>News</b><!--[if IE 7]><!--></a><!--<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]--> <div class="select_sub">

<ul class="sub">

<li><a href="#nogo">News details 1</a></li> <li><a href="#nogo">News details 2</a></li> <li><a href="#nogo">News details 3</a></li> </ul>

</div>

<!--[if lte IE 6]></td></tr></table></a><![endif]--> </li> </ul> <div class="clear"></div> </div> <div class="clear"></div> </div> <!-- start nav --> </div> <div class="clear"></div>

(19)

<!-- start nav-outer --> </div> <div class="clear"></div>

footer.php

<div id="footer"> <!-- start footer-left --> <div id="footer-left">

Admin Skin &copy; Copyright Internet Dreams Ltd. <span id="spanYear"></span> <a href="">www.netdreams.co.uk</a>. All rights reserved.</div>

<!-- end footer-left --> <div class="clear">&nbsp;</div> </div>

5. Setelah dipisahkan buat satu buah view kembali dengan nama dashboard_view.php pada direktori

“training/application/views”:

Kemudian isi file dengan source code berikut :

dashboard_view.php

<div id="content-outer"> <!-- start content --> <div id="content"> <!-- start page-heading --> <div id="page-heading"> <h1>Add product</h1> </div> <!-- end page-heading -->

<table width="100%" cellspacing="0" cellpadding="0" border="0" id="content-table"> <tbody><tr>

<th class="sized" rowspan="3"><img width="20" height="300" alt="" src="<?php echo base_url(); ?>assets/images/shared/side_shadowleft.jpg"></th>

<th class="topleft"></th>

<td id="tbl-border-top">&nbsp;</td> <th class="topright"></th>

<th class="sized" rowspan="3"><img width="20" height="300" alt="" src="<?php echo base_url(); ?>assets/images/shared/side_shadowright.jpg"></th> </tr> <tr> <td id="tbl-border-left"></td> <td> <!-- start content-table-inner ... START --> <div id="content-table-inner"> <!-- start table-content --> <div id="table-content"> <h2>Sub Heading </h2>

(20)

<h3>Local Heading</h3>

Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et Lorem ipsum dolor sit amet consectetur

adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. dolore magna aliqua. Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et Lorem ipsum dolor sit amet consectetur

<br> <br>

Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et Lorem ipsum dolor sit amet consectetur

adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. dolore magna aliqua. Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et Lorem ipsum dolor sit amet consectetur

<br> <br>

Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et Lorem ipsum dolor sit amet consectetur

adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. dolore magna aliqua. Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et Lorem ipsum dolor sit amet consectetur

</div>

<!-- end table-content --> <div class="clear"></div> </div>

<!-- end content-table-inner ...END --> </td> <td id="tbl-border-right"></td> </tr> <tr> <th class="sized bottomleft"></th> <td id="tbl-border-bottom">&nbsp;</td> <th class="sized bottomright"></th> </tr> </tbody></table> <div class="clear">&nbsp;</div> </div> <!-- end content --> <div class="clear">&nbsp;</div> </div> <div class="clear">&nbsp;</div>

(21)

6. Maka proses selanjutnya adalah membuat Controller yang memanggil view-view yang telah kita

buat sebelumnya.

Ubah file dashboard.php pada direktori controllers menjadi seperti berikut :

dashboard.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class dashboard extends CI_Controller {

function index() { $data['page'] = 'dashboard_view'; $this->load->view('container', $data); } } ?>

7. Silahkan akses halaman

http://localhost/training/ maka output pada browser akan terlihat seperti

berikut :

(22)
(23)

BAB 3: Data Modeling

Pada bab ini akan difokuskan untuk membuat database user, role dan menu dengan menggunakan

editor power designer, mulai dari CDM, PDM hingga export ke MySQL database serta membuat

class-class Model pada CodeIgniter.

Task 1 – Membuat Conceptual Data Model

CDM adalah model yang dibuat berdasarkan anggapan bahwa dunia nyata terdiri dari koleksi

obyek-obyek dasar yang dinamakan entitas (entity) serta hubungan (relationship) antara entitas-entitas itu.

Manfaat Penggunaan CDM dalam perancangan database :

Memberikan gambaran yang lengkap dari struktur basis data yaitu arti, hubungan, dan

batasan-batasan.

Alat komunikasi antar pemakai basis data, designer, dan analis.

1. Buka power designer 15, dan buat project baru dengan cara klik pada menu “File” -> “New Project”

beri nama ‘trainingci’.

2. Setelah itu buat Conceptual Data Model diagram, klik pada menu “File” -> “New Model”, maka

akan muncul dialog seperti berikut :

(24)

Pilih tab “Categories” -> “Information” -> “Conceptual Data” dan beri nama model “CDM Training”,

kemudian klik tombol “OK”, seperti yang terlihat pada gambar diatas.

3. Setelah CDM ditambahkan pada project simpan data, “File” -> “Save”. Kemudian aktifkan

Diagram_1 di dalam CDM Training.

4. Buat Entity (entitas), dengan menggunakan toolbox disebelah kanan diagram, entitas terlihat seperti

pada gambar di bawah.

Klik pada diagram, buat tiga entitas, seperti terlihat pada gambar berikut :

(25)

Name

: m_user

Attributes :

No

Name

Code

Data Type

Length

M

P

D

1

userid

USERID

Long integer

v

v

v

2

user_name

USER_NAME

Variable characters (30)

30

v

v

3

user_password

USER_PASSWORD

Variable characters

(100)

100

v

v

4

user_active

USER_ACTIVE

Boolean

v

v

Sehingga terlihat seperti pada gambar berikut :

(26)

Saat userid kita pilih sebagai (P) Primary maka akan pada tab Identifier akan ditambahkan record

dengan nama Identifier_1. Agar tidak membingungkan nantinya maka nama kita ubah dengan

pk_userid.

6. Setelah selesai maka pada diagram akan terlihat seperti berikut :

7. Langkah selanjutnya adalah mengubah dua entitas lainnya dengan nilai sebagai berikut :

Untuk Entity_2

Name

: m_role

Attributes

:

No Name

Code

Data Type

Length

M P D

1

roleid

ROLEID

Long integer

v

v v

2

role_name

ROLE_NAME

Variable characters (30)

30

v

v

3

role_description ROLE_DESCRIPTION Variable characters (120)

120

v

Identity

: pk_menuid

(27)

Name

: m_menu

Attributes

:

No

Name

Code

Data Type

Length

M P D

1

menuid

MENUID

Long integer

v

v v

2

menu_name

MENU_NAME

Variable characters (30)

30

v

v

3

menu_descripti

on

MENU_DESCRIPTIO

N

Variable characters (120)

120

v

4

menu_active

MENU_ACTIVE

Boolean

v

v

Identity

: pk_menuid

8. Setelah selesai maka pada diagram akan terlihat seperti berikut :

Task 2 – Relationship pada CDM

1. Untuk membuat relasi antara entitas klik pada notasi relationship yang ditunjukkan pada gambar

berikut :

(28)

2. Drag dari entitas satu ke entitas yang lain, hingga membentuk sebuah garis penghubung. Kali ini

yang direlasikan adalah :

Menu -> Role

Role -> User

3. Maka hasil outputnya akan terlihat seperti berikut :

4. Klik 2x pada Relationship_1, Ubah relasi m_menu dengan m_role menjadi seperti berikut :

Ubah Name menjadi m_role2menu dan Cardinalities menjadi Many to Many seperti terlihat pada

gambar berikut :

(29)

Kemudian klik OK.

5. Langkah selanjutnya hampir sama dengan langkah sebelumnya yaitu mengubah relasi dari m_user

ke m_role. Klik 2x pada Relationship_2, Ubah relasi m_user dengan m_role menjadi seperti

berikut :

(30)

Ubah Name menjadi m_user2role dan Cardinalities menjadi One to Many seperti terlihat pada

gambar berikut :

Kemudian klik OK.

(31)

Task 3 – Phisical Data Model

PDM Merupakan model yang menggunakan sejumlah tabel untuk menggambarkan data serta hubungan

antara data-data tersebut. Setiap tabel mempunyai sejumlah kolom di mana setiap kolom memiliki

nama yang unik.

Phisical Data Model sangat erat hubungannya dengan perancangan database secara fisik. Dalam

permodelan PDM dapat diturunkan dari CDM, karena sebenarnya dimana tabel-tabel dapat didapatkan

dari logika analisis pada Conceptual Data Model.

Pada power designer untuk membuat Phisical Data Model dari Conceptual Data Model adalah sebagai

berikut :

1. Klik pada Tools -> Generate Phisical Data Model …

2. Setelah muncul window silahkan ubah DBMS menjadi MySQL 5.0 dan Name menjadi PDM Training,

yang terlihat seperti berikut :

Kemudian klik tombol OK.

(32)

Kenapa muncul tabel baru? Hal tersebut dikarenakan Relationship pada Conceptual Data Model kita

buat Many to Many. Seperti yang saya jelaskan sebelumnya bahwa Conceptual Data Model adalah

objek dasar yang berdasarkan analisis. Bagaimana implementasi untuk Many to Many di database

sebenarnya adalah membuat tabel diantara dua tabel yang dihubungkan.

4. Auto Increment hanya ada pada Phisical Data Model dengan Jenis database tertentu, sehingga

karena kita tidak bisa mendefinisikan Auto Increment pada CDM, Sehingga kita definiskan saat

model telah menjadi PDM.

Untuk kali ini kita ubah primary key pada 3 tabel m_user, m_role, dan m_menu menjadi auto

increment.

Untuk tabel m_user, klik 2x pada tabel m_user kemudian klik pada tab Column. Pilih column dengan

atribut P (Primary) untuk tabel m_user columnnya adalah userid. setelah itu klik 2x lagi. Maka akan

muncul window baru untuk column properties, check identity seperti pada gambar berikut :

(33)

5. Lakukan proses yang sama seperti pada Task 3, No 4 untuk m_role dan m_menu.

Task 4 – Generate Script

Setelah PDM selesai kita akan memindahkan diagram tersebut ke database yang sesungguhnya yaitu

MySQL 5.0.

1. Untuk membuat script dari diagram tersebut adalah dengan klik pada menu Database -> Generate

Database. Sehingga tampil seperti pada diagram berikut :

2. Untuk penstandaran penamaan tabel, untuk training kali ini kita akan menggunakan “lowercase”

(huruf kecil), untuk pengaturannya dapat dilihat pada menu Format pada Database Generation.

(34)

3. Untuk melihat hasilnya dapat dilihat pada tab Preview, seperti pada gambar berikut :

4. Setelah itu klik OK.

5. Buka phpmyadmin pada alamat :

http://localhost/phpmyadmin/

6. Bila anda pertama kali install, atau tidak melakukan perubahan account sama sekali pada XAMPP

maka defaultnya username = “root”, dan password = “”

7. Klik pada tab Database , buat database baru dengan nama “training” seperti terlihat pada gambar

berikut :

Kemudian tekan tombol Create

8. Aktifkan database training, dengan klik pada menu sebelah kiri dengan nama “training” seperti pada

gambar berikut :

(35)

9. Masuk ke tab Import, kemudian browse file hasil output dari PDM tadi. Setelah itu klik “GO”.

Gambar terlihat seperti berikut :

(36)

10. Jika berhasil maka akan tampil output seperti berikut :

Task 5 – Intellisense Pada Netbeans & CodeIgniter

Tambahkan baris kode berikut agar netbeans dapat mengetahui atribut-atribut dari kelasnya

(menyalakan intellisense).

Buat file dengan nama helper.php pada folder training yang terletak paling luar dan isikan dengan baris

kode berikut :

helper.php

<?php /**

* @property CI_DB_active_record $db * @property CI_DB_forge $dbforge * @property CI_Benchmark $benchmark * @property CI_Calendar $calendar * @property CI_Cart $cart

* @property CI_Config $config

* @property CI_Controller $controller * @property CI_Email $email

* @property CI_Encrypt $encrypt * @property CI_Exceptions $exceptions

* @property CI_Form_validation $form_validation * @property CI_Ftp $ftp

* @property CI_Hooks $hooks

* @property CI_Image_lib $image_lib * @property CI_Input $input

* @property CI_Language $language * @property CI_Loader $load * @property CI_Log $log * @property CI_Model $model * @property CI_Output $output

(37)

* @property CI_Parser $parser * @property CI_Profiler $profiler * @property CI_Router $router * @property CI_Session $session * @property CI_Sha1 $sha1 * @property CI_Table $table

* @property CI_Trackback $trackback * @property CI_Typography $typography * @property CI_Unit_test $unit_test * @property CI_Upload $upload * @property CI_URI $uri

* @property CI_User_agent $user_agent * @property CI_Validation $validation * @property CI_Xmlrpc $xmlrpc

* @property CI_Xmlrpcs $xmlrpcs * @property CI_Zip $zip

*/

class CI_Controller {}; /**

* @property CI_DB_active_record $db * @property CI_DB_forge $dbforge * @property CI_Config $config * @property CI_Loader $load * @property CI_Session $session */

class CI_Model {}; ?>

(38)

BAB 4: Manajemen Controller

Pada kali ini lebih difokuskan untuk mengatur controller agar tidak melakukan coding berulang-ulang,

penerapan inheritance pada controller dan pengaturan menu.

Task 1 – Inhertiance Pada CodeIgniter Controller

1. Untuk menurunkan class CI_Controller, CodeIgniter memiliki aturan yang harus dipenuhi sebelum

kita melakukan penurunan class. Penurunan untuk core library CodeIgniter adalah dengan

menambahkan file pada direktori “application/core” dengan nama file diawali dengan prefik

tertentu sesuai dengan configurasi pada file application/config/config.php, seperti terlihat sebagai

berikut :

config.php

$config['subclass_prefix'] = 'MY_';

Sehingga nama file yang akan dibuat diawali dengan prefix “MY_”.

2. Buat file “MY_Controller.php” pada direktori “application/core” setelah itu isikan dengan kode

berikut untuk menurunkan dari class CI_Controller.

MY_Controller.php

<?php

class MY_Controller extends CI_Controller { public function __construct() {

parent::__construct(); }

} ?>

3. Ubah file dashboard.php pada direktori “application/controller” yang sebelumnya extend dari class

CI_Controller menjadi MY_Controller.

dashboard.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class dashboard extends MY_Controller {

function index() { $data['page'] = 'dashboard_view'; $this->load->view('container', $data); } } ?>

4. Saat ini kita telah menurunkan class CI_Controller, pastikan anda tetap dapat mengakses halaman

http://localhost/training/ tanpa error.

(39)

Task 2 – Menampilkan menu secara dinamis

1. Kita buat terlebih dahulu data sample menu, seperti terlihat sebagai berikut :

INSERT INTO `m_menu` (`menu_id`, `menu_name`, `menu_description`, `menu_active`) VALUES (1, 'Dashboard', 'Dashboard', 1),

(2, 'Client', 'Client', 1), (3, 'Product', 'Product', 1), (4, 'User', 'User', 1);

2. Jalankan script tersebut pada phpmyadmin, dengan klik pada database training, kemudian pilih

menu SQL, setelah itu ketikkan kode tersebut pada text area query, kemudian tekan GO, seperti

pada gambar berikut :

3. Setelah itu kita buat class Model untuk pengaturan menu tersebut. Kita buat file dengan nama

menu_model.php pada direktori “application/models”.

menu_model.php

<?php

class Menu_model extends CI_Model { function get_all_menu(){ $all_menu = $this->db->get('m_menu'); return $all_menu->result_object(); } } ?>

Sintaks query diatas mungkin kurang familiar dipakai, sintaks seperti diatas dinamakan ActiveRecord

dengan tujuan untuk menyederhanakan penulisan kode untuk berinteraksi dengan database, dan

tentunya untuk dapat digunakan pada beberapa database (standarisasi penulisan sintaks). Untuk

lebih detilnya silahkan baca pada halaman : http://en.wikipedia.org/wiki/Active_record_pattern.

(40)

Untuk detil fungsi dan cara penggunaan model pada CodeIgniter silahkan baca pada halaman :

http://codeigniter.com/user_guide/general/models.html.

$this->db->get('m_menu');

Akan menghasilkan output query :

select * from m_menu

4. Setelah membuat model, maka kita akan integrasikan dengan file dashboard.php pada direktori

“application/controllers/”, sehingga file menjadi seperti berikut :

dashboard.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class dashboard extends MY_Controller {

function index() { $this->load->model('Menu_model'); $this->menus = $this->Menu_model->get_all_menu(); $data['page'] = 'dashboard_view'; $this->load->view('container', $data); } } ?>

5. Setelah controller, kita akan mengubah view. Untuk itu buka file menu.php pada direktori

“application/views/part/”. Ubah script yang sebelumnya menjadi seperti berikut :

menu.php

<div class="nav-outer-repeat"> <!-- start nav-outer --> <div class="nav-outer"> <!-- start nav-right --> <div id="nav-right"> <div class="nav-divider">&nbsp;</div>

<div class="showhide-account active"><img width="93" height="14" alt="" src="<?php echo base_url(); ?>assets/images/shared/nav/nav_myaccount.gif"></div>

<div class="nav-divider">&nbsp;</div>

<a id="logout" href=""><img width="64" height="14" alt="" src="<?php echo base_url(); ?>assets/images/shared/nav/nav_logout.gif"></a>

<div class="clear">&nbsp;</div> <!-- start account-content -->

(41)

<div class="account-content" style="display: none;"> <div class="account-drop-inner">

<a id="acc-settings" href="">Settings</a> <div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-details" href="">Personal details </a> <div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div>

<a id="acc-project" href="">Project details</a> <div class="clear">&nbsp;</div>

<div class="acc-line">&nbsp;</div> <a id="acc-inbox" href="">Inbox</a> <div class="clear">&nbsp;</div> <div class="acc-line">&nbsp;</div> <a id="acc-stats" href="">Statistics</a> </div> </div> <!-- end account-content --> </div> <!-- end nav-right --> <!-- start nav --> <div class="nav"> <div class="table">

<?php foreach ($this->menus as $menu){ ?>

<ul class="select"><li><a href="#nogo"><b><?php echo $menu->menu_name; ?></b><!--[if IE 7]><!--></a><!--<![endif]-->

<!--[if lte IE 6]><table><tr><td><![endif]--> <div class="select_sub">

<ul class="sub">

<li><a href="<?php echo site_url($menu->menu_name); ?>">View All <?php echo $menu->menu_name; ?></a></li>

<li><a href="<?php echo site_url($menu->menu_name . "/insert"); ?>">Add <?php echo $menu->menu_name; ?></a></li>

</ul> </div>

<!--[if lte IE 6]></td></tr></table></a><![endif]--> </li> </ul> <div class="nav-divider">&nbsp;</div> <?php } ?> <div class="clear"></div> </div> <div class="clear"></div> </div> <!-- start nav -->

(42)

</div>

<div class="clear"></div> <!-- start nav-outer --> </div>

<div class="clear"></div>

6. Akses halaman http://localhost/training/ maka menu akan berubah seperti berikut :

7. Ketika kita klik pada link View All User, maka akan tampil error seperti gambar berikut :

Karena kita belum membuat controller untuk meng-handle request uri :

http://localhost/training/index.php/User

Langkah selanjutnya kita coba untuk membuat controller untuk menu user, buat file dengan nama

(43)

user.php

<?php

if (!defined('BASEPATH')) exit('No direct script access allowed'); class user extends MY_Controller {

function index () { $this->load->model('Menu_model'); $this->menus = $this->Menu_model->get_all_menu(); $data['page'] = 'user_view'; $this->load->view('container', $data); } } ?>

Kemudian kita buat user_view.php pada direktori “application/views/” yang berisi template grid

dari tema yang telah kita download sebelumnya dengan nama file “table.html”.

user_view.php

<div id="content-outer"> <!-- start content --> <div id="content"> <!-- start page-heading --> <div id="page-heading"> <h1>Add product</h1> </div> <!-- end page-heading -->

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table"> <tr>

<th rowspan="3" class="sized"><img src="<?php echo base_url(); ?>assets/images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th> <th class="topleft"></th>

<td id="tbl-border-top">&nbsp;</td> <th class="topright"></th>

<th rowspan="3" class="sized"><img src="<?php echo base_url(); ?>assets/images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th> </tr>

<tr>

<td id="tbl-border-left"></td> <td>

(44)

<!-- start content-table-inner ... START --> <div id="content-table-inner"> <!-- start table-content --> <div id="table-content"> <!-- start product-table ... --> <form id="mainform" action="">

<table border="0" width="100%" cellpadding="0" cellspacing="0" id="product-table">

<tr>

<th class="table-header-check"><a id="toggle-all" ></a> </th> <th class="table-header-repeat line-left minwidth-1"><a href="">Last Name</a> </th>

<th class="table-header-repeat line-left minwidth-1"><a href="">First Name</a></th> <th class="table-header-repeat line-left"><a href="">Email</a></th> <th class="table-header-repeat line-left"><a href="">Due</a></th> <th class="table-header-repeat line-left"><a href="">Website</a></th> <th class="table-header-options line-left"><a href="">Options</a></th> </tr> <tr> <td><input type="checkbox"/></td> <td>Sabev</td> <td>George</td> <td><a href="">[email protected]</a></td> <td>R250</td> <td><a href="">www.mainevent.co.za</a></td> <td class="options-width">

<a href="" title="Edit" class="icon-1 info-tooltip"></a> <a href="" title="Edit" class="icon-2 info-tooltip"></a> <a href="" title="Edit" class="icon-3 info-tooltip"></a> <a href="" title="Edit" class="icon-4 info-tooltip"></a> <a href="" title="Edit" class="icon-5 info-tooltip"></a> </td>

</tr>

<tr class="alternate-row">

<td><input type="checkbox"/></td> <td>Sabev</td>

(45)

<td>George</td>

<td><a href="">[email protected]</a></td> <td>R250</td>

<td><a href="">www.mainevent.co.za</a></td> <td class="options-width">

<a href="" title="Edit" class="icon-1 info-tooltip"></a> <a href="" title="Edit" class="icon-2 info-tooltip"></a> <a href="" title="Edit" class="icon-3 info-tooltip"></a> <a href="" title="Edit" class="icon-4 info-tooltip"></a> <a href="" title="Edit" class="icon-5 info-tooltip"></a> </td> </tr> <tr> <td><input type="checkbox"/></td> <td>Sabev</td> <td>George</td> <td><a href="">[email protected]</a></td> <td>R250</td> <td><a href="">www.mainevent.co.za</a></td> <td class="options-width">

<a href="" title="Edit" class="icon-1 info-tooltip"></a> <a href="" title="Edit" class="icon-2 info-tooltip"></a> <a href="" title="Edit" class="icon-3 info-tooltip"></a> <a href="" title="Edit" class="icon-4 info-tooltip"></a> <a href="" title="Edit" class="icon-5 info-tooltip"></a> </td> </tr> <tr class="alternate-row"> <td><input type="checkbox"/></td> <td>Sabev</td> <td>George</td> <td><a href="">[email protected]</a></td> <td>R250</td> <td><a href="">www.mainevent.co.za</a></td> <td class="options-width">

<a href="" title="Edit" class="icon-1 info-tooltip"></a> <a href="" title="Edit" class="icon-2 info-tooltip"></a> <a href="" title="Edit" class="icon-3 info-tooltip"></a> <a href="" title="Edit" class="icon-4 info-tooltip"></a> <a href="" title="Edit" class="icon-5 info-tooltip"></a> </td>

</tr> </table>

(46)

</form> </div>

<!-- end content-table -->

<!-- start actions-box ... --> <div id="actions-box">

<a href="" class="action-slider"></a> <div id="actions-box-slider">

<a href="" class="action-edit">Edit</a> <a href="" class="action-delete">Delete</a> </div>

<div class="clear"></div> </div>

<!-- end actions-box... -->

<!-- start paging... --> <table border="0" cellpadding="0" cellspacing="0" id="paging-table"> <tr>

<td>

<a href="" class="page-far-left"></a> <a href="" class="page-left"></a>

<div id="page-info">Page <strong>1</strong> / 15</div> <a href="" class="page-right"></a>

<a href="" class="page-far-right"></a> </td>

<td>

<select class="styledselect_pages">

<option value="">Number of rows</option> <option value="">1</option> <option value="">2</option> <option value="">3</option> </select> </td> </tr> </table> <!-- end paging... --> <div class="clear"></div> </div>

<!-- end content-table-inner ...END --> </td>

<td id="tbl-border-right"></td> </tr>

(47)

<tr> <th class="sized bottomleft"></th> <td id="tbl-border-bottom">&nbsp;</td> <th class="sized bottomright"></th> </tr> </table> <div class="clear">&nbsp;</div> </div> <!-- end content --> <div class="clear">&nbsp;</div> </div> <div class="clear">&nbsp;</div>

8. Klik link View All User pada http://localhost/training/

, maka akan tampil seperti berikut :

9. Untuk saat ini tentunya ada beberapa kode yang selalu di tuliskan pada tiap-tiap halaman, yaitu

fungsi untuk mendapatkan semua halaman,

$this->load->model('Menu_model');

$this->menus = $this->Menu_model->get_all_menu();

Kita pindahkan kode-kode tersebut ke dalam MY_Controller class, sehingga kita tidak perlu menulis

pada tiap-tiap fungsi untuk mendapatkan menu.

(48)

MY_Controller.php

<?php

class MY_Controller extends CI_Controller { public function __construct() {

parent::__construct(); $this->loadmenu(); }

private function loadmenu() {

$this->load->model('Menu_model');

$this->menus = $this->Menu_model->get_all_menu(); }

} ?>

Jangan lupa untuk menghapus baris kode berikut pada dashboard.php dan user.php

$this->load->model('Menu_model');

$this->menus = $this->Menu_model->get_all_menu();

Task 3 – Clean URL pada XAMPP web server

Alamat untuk mengakses menu adalah pada

http://localhost/training/index.php/User/ kita bisa

hilangkan index.php dalam url tersebut dengan cara berikut :

1. Buka command prompt (cmd)

2. Masuk ke folder dimana CodeIgniter ter-install, misal pada komputer ada pada drive C, sehingga

kode akan terlihat sebagai berikut :

cd C:\xampp\htdocs\training

3. Buat file .htaccess pada folder tersebut dengan sintaks copy con

C:\xampp\htdocs\training>copy con .htaccess

4. Setelah itu klik [enter] layar akan blank, kemudian ketikkan kode berikut :

RewriteEngine On

RewriteBase /training/

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [PT,L]

5. Klik [ctrl+z] maka akan muncul kode ^Z pada layar, kemudian tekan [enter] kembali.

6. Maka file .htaccess akan ada pada folder training, silahkan cek terlebih dahulu.

(49)

7. Konfigurasi selanjutnya adalah untuk apache, cari file httpd.conf misal xampp berada pada drive C:

C:\xampp\apache\conf\httpd.conf

8. Buka file tersebut dan cari sintaks seperti berikut :

#LoadModule rewrite_module modules/mod_rewrite.so

9. Hilangkan tanda (#) dan simpan perubahan, sehingga kode akan tampak sebagai berikut :

LoadModule rewrite_module modules/mod_rewrite.so

10. Buka file config.php pada direktori C:\xampp\htdocs\training\system\application\config.

11. Ubah kode

$config['index_page'] = "index.php";

Menjadi

$config['index_page'] = "";

12. Jangan lupa restart xampp untuk Apache module

13. Buka halaman berikut :

http://localhost/training/User/

(50)

BAB 5: Pengaturan Hak Akses

Pada bab ini akan dijelaskan bagaimana metode autentikasi yang sebaiknya dilakukan, tidak hanya

pembatasan pada hak masuk aplikasi, namun pembatasan pada tiap-tiap halaman.

Task 1 – Pembuatan Desain Halaman Login

1. Buat file controller dengan nama “login.php” pada direktori “application/controllers” isikan dengan

kode berikut :

login.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class login extends CI_Controller {

function index() {

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

} ?>

2. Buat file view dengan nama “login_view.php” pada direktori “application/controllers” isikan

dengan kode berikut :

login_view.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Internet Dreams</title>

<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/screen.css" type="text/css" media="screen" title="default" />

<!-- jquery core -->

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

<!-- Custom jquery scripts -->

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

<!-- MUST BE THE LAST SCRIPT IN <HEAD></HEAD></HEAD> png fix -->

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

(51)

$(document).ready(function(){ $(document).pngFix( ); }); </script> </head> <body id="login-bg"> <!-- Start: login-holder --> <div id="login-holder"> <!-- start logo --> <div id="logo-login"> <a href="index.html">

<img src="<?php echo base_url(); ?>assets/images/shared/logo.png" width="156" height="40" alt="" /> </a> </div> <!-- end logo --> <div class="clear"></div> <!-- start loginbox ... --> <div id="loginbox"> <!-- start login-inner --> <div id="login-inner">

<table border="0" cellpadding="0" cellspacing="0"> <tr>

<th>Username</th> <td>

<input type="text" class="login-inp" /> </td>

</tr> <tr>

<th>Password</th> <td>

<input type="password" value="" onfocus="this.value=''" class="login-inp" /> </td> </tr> <tr> <th></th> <td valign="top">

<input type="checkbox" class="checkbox-size" id="login-check" /> <label for="login-check">Remember me</label></td>

</tr> <tr>

<th></th>

<td><input type="button" class="submit-login" /></td> </tr>

(52)

</table> </div>

<!-- end login-inner --> <div class="clear"></div>

<a href="" class="forgot-pwd">Forgot Password?</a> </div>

<!-- end loginbox -->

<!-- start forgotbox ... --> <div id="forgotbox">

<div id="forgotbox-text">Please send us your email and we'll reset your password.</div>

<!-- start forgot-inner --> <div id="forgot-inner">

<table border="0" cellpadding="0" cellspacing="0"> <tr>

<th>Email address:</th>

<td><input type="text" value="" class="login-inp" /></td> </tr>

<tr>

<th></th>

<td><input type="button" class="submit-login" /></td> </tr>

</table> </div>

<!-- end forgot-inner --> <div class="clear"></div>

<a href="" class="back-login">Back to login</a> </div> <!-- end forgotbox --> </div> <!-- End: login-holder --> </body> </html>

Untuk saat ini kita masih gunakan script statis, halaman hanya untuk display saja. Untuk mekanisme

login akan dibahas pada Task selanjutnya.

3. Saat kita akses halaman

http://localhost/training/login/ maka output pada browser akan terlihat

seperti berikut :

(53)

Task 2 – Redirect ke halaman login

Saat kita mengakses halaman

http://localhost/training/ halaman utama dapat tampil tanpa ada

mekanisme login. Kita ubah menjadi halaman dashboard hanya boleh diakses oleh user yang telah login

saja, bagi yang belum akan di-arahkan ke halaman login.

1. Tambahkan baris kode ke dalam file “MY_Controller.php” pada direktori “application/core” untuk

pengecekan user melalui session, sehingga baris kode menjadi seperti berikut :

MY_Controller.php

<?php

class MY_Controller extends CI_Controller { public function __construct() {

parent::__construct(); $this->checkauth(); $this->loadmenu(); }

private function loadmenu() {

$this->load->model('Menu_model');

$this->menus = $this->Menu_model->get_all_menu(); }

private function checkauth() {

if (!$this->session->userdata('is_login')) { redirect('/login', 'refresh');

} } }

(54)

?>

2. Coba kembali mengakses halaman pada alamat url

http://localhost/training/, maka kita akan di

alihkan (redirect) ke halaman login. Saat ini kita telah berhasil memproteksi halaman-halaman

backend yang telah kita buat.

Task 3 – Mekanisme Login

1. Sebelum kita mulai untuk membuat mekanisme login, yang pertama adalah menambahkan data

user dan role terlebih dahulu untuk mencoba.

INSERT INTO `training`.`m_role` (`role_id`, `role_name`, `role_description`) VALUES (1, 'admin', 'admin');

INSERT INTO `training`.`m_user` (`userid`, `role_id`, `user_name`, `user_password`, `user_active`) VALUES (1, 1, 'admin', '7c4a8d09ca3762af61e59520943dc26494f8941b', 1);

Kita melakukan hashing dengan metode sha1 untuk password, sebelum di hash passwordnya adalah

“123456”.

2. Kita buat dulu model yang digunakan untuk pengecekan user pada database, kita buat file dengan

nama “user_model.php” pada direktori “application/models”. Isikan dengan kode berikut :

user_model.php

<?php

class User_model extends CI_Model { function login($username, $password){ $this->db->select('*'); $this->db->from('m_user'); $this->db->where('user_name', $username); $this->db->where('user_password', sha1($password)); $this->db->where('user_active', 1); $objUsers = $this->db->get()->result_object(); if (count($objUsers) == 1){ return $objUsers[0]; } else{ return FALSE; } } } ?>

References

Related documents

Kaitanya litertur diatas menjadi pendukung dalam penulisan materi penulis yakni, dalam isu tersebut memperlihatkan bentuk realisasi Kerjasama Singapura-Indonesia yang terjalin

Pada tampilan halaman pelayanan akademik dapat dilihat pada gambar diatas maka dilihat pemilihan kuisioner dapat memberikan pendapat akan layanan akademik yang berada pada

penanaman yang menutupi 30% atau lebih permukaan tanah dengan sisa tanaman. untuk mengurangi erosi tanah

Customer service merupakan salah satu faktor yang cukup penting untuk mengurangi jumlah keluhan atau complaint yang masuk terhadap mobile application Lazada, sehingga disarankan

Menurut Hidayat (2010:2) “Website atau situs dapat diartikan sebagai kumpulan halaman- halaman yang digunakan untuk menampilkan informasi teks, gambar diam atau gerak, animasi, suara,

Salah satu cara untuk mereduksi karbondioksida adalah dengan mengurangi emisi karbon, untuk itu perlu diketahui kandungan karbon di atas permukaan tanah pada Kawasan

Tujuan penulisan ini adalah untuk mengetahui aspek perlindungan hukum bagi konsumen untuk secara nyaman dapat melakukan transaksi terhadap produk makanan yang dikehendaki,

Beban sisi diatas garis air untuk menghitung tebal Beban sisi diatas garis air untuk menghitung tebal plat sisi ( plat sisi ( side plate  side plate)).. P P S1 S1 = Po = Po 1