You are on page 1of 10

Tutorial CodeIgniter Dasar Part V User Accounts Chapter 2

Sudah lamaaaaaa sekali saya ga update blog.. Entah kenapa, rasanya susah banget waktu diluangkan untuk mengisi blog ini. Banyak pembaca yang meminta saya update blog ini, jadi sebisa mungkin saya update lagi blog ini. Mudah-mudahan untuk ke depannya blog ini gak mati, so saya akan sering mengupdate-nya.. hehe. By the way, sebenarnya saya pengen mengisi Harian Cheyuz ini dengan tutorial PHP lain, seperti CakePHP misalnya. Kenapa? soalnya kita tidak harus terpaku kepada satu framework, tetapi kita harus tahu isi dari framework lain. Mungkin next post saya akan mengisi tutorial CakePHP. Coming soon ya Pada tulisan kali ini saya akan meneruskan tutorial ini: Tutorial CodeIgniter Dasar Part V User Accounts Chapter 1, tentang account pada CI. Sesuai dengan janji saya, saya akan meneruskan tutorial untuk tahap pembuatan form registrasi dan controller untuk login dan logout. Sebelumnya, asumsikan bahwa root dari tutorial ini adalah http://localhost/aplikasi_keanggotaan/ Buka /application/config/autoload.php, kemudian lihat line 55. Di situ ada setting untuk load library, default seperti ini:
$autoload['libraries'] = array();

Ubah jadi seperti ini:


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

supaya kita tidak usah meload library database dan session di controller. Kemudian buka /application/config/config.php, cari $config['encryption_key']. Ubah nilainya sesuai dengan keinginan Anda:
$config['encryption_key'] = '1d6ada56';

Seperti yang kita buat pada tutorial sebelumnya, kita buat terlebih dahulu file account_model.php pada folder model di aplikasi kita.
<?php /** * @author cheyuz */ class Account_model extends CI_Model { private $table = 'user'; //isi nama table user di sini function __construct() { parent::__construct(); } function register($data) { $this->db->insert($this->table, $data); } function login($username, $password) { $data = $this->db ->where(array('username' => $username, 'password' => md5($password)))

->get($this->table); //dicek if ($data->num_rows() > 0) { $user = $data->row(); //data hasil seleksi dimasukkan ke dalam $session $session = array( 'logged_in' => 1, 'id_user' => $user->id_user, 'group' => $user->group, 'username' => $user->username, 'nama_lengkap' => $user->nama_lengkap, ); //data dari $session akhirnya dimasukkan ke dalam session (menggunakan library CI) $this->session->set_userdata($session); return true; } else { $this->session->set_flashdata('notification', 'Username dan Password tidak cocok'); return false; } } function logout() { $this->session->sess_destroy(); } }

Controller yang akan kita buat adalah controller Member, dengan nama file member.php. Kita buat class Member di /application/controller/member.php seperti berikut:
<?php /** * Description of member * * @author cheyuz */ class Member extends CI_Controller { function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); $this->load->model('account_model'); } } ... $this->load->helper(array('form', 'url')); ...

Pada function __construct(), kita akan meload helper yang akan kita gunakan, yaitu form, karena kita akan membuat halaman form registrasi menggunakan form bawaan CI, jadi kita harus meload helper form CI. Selain helper form, kita juga akan menggunakan helper url, buat apa? helper URL digunakan ketika kita mengalihkan halaman ke halaman lain, atau kita sebut dengan istilah redirect(). Jadi jika kita ingin menggunakan function redirect() pada CI, maka kita harus memanggil helper url terlebih dahulu.
...

$this->load->model('account_model'); ...

Di atas ditulis bahwa pada awal controller dipanggil yaitu function __construct(), selain meload helper form dan url, kita juga meload model account yang akan kita gunakan nanti untuk autentikasi (auth), yaitu model yang sudah dijelaskan pada tutorial Tutorial CodeIgniter Dasar Part V User Accounts Chapter 1 (silakan baca tutorialnya). Model ini akan digunakan ketika kita melakukan function register, login, dan logout.
Membuat Halaman Form Registrasi

OK, kita akan coba membuat halaman registrasi terlebih dahulu, kita akan membuat sebuah form sederhana mencakup nama lengkap, username, dan password. Sebagai catatan, tutorial ini hanyalah contoh sederhana, jadi untuk form dan field Anda bisa membuat sesuai kreatifitas. Sebagai contoh, Anda dapat menambahkan field email, no_telp, alamat, dan sebagainya. Untuk form, saya di sini menggunakan teknik div, bukan table, silakan cek pada tutorial ini: Tips membuat Form HTML yang Rapi dan Efektif Inilah gambaran form yang harus kita buat:
Form Pendaftaran Nama Lengkap

Username

Password

Hak Akses

Untuk source code-nya, silakan copy kode di bawah ini, dan simpan di /application/views/ dengan nama member.php:
<h2>Form Pendaftaran</h2> <?php echo form_open('member/register') ?> <div class="input"> <?php echo form_label('Nama Lengkap'); echo form_input('data[nama_lengkap]'); ?> </div> <div class="input"> <?php echo form_label('Username'); echo form_input('data[username]'); ?> </div> <div class="input"> <?php echo form_label('Password'); echo form_password('data[password]'); ?> </div> <div class="input select"> <?php echo form_label('Hak Akses'); echo form_dropdown('data[group]', array('admin' => 'Administrator', 'operator' => 'Operator'));

?> </div> <div class="submit"> <?php echo form_submit('register', 'Daftar'); echo form_reset('reset', 'Reset'); ?> </div> <?php echo form_close() ?>

Bagi yang belum tahu, ini function2 helper form pada CI, sebenarnya masih kurang bagus soalnya masih prosedural, helpernya masih belum menggunakan OOP..
echo form_open('member/register');

Adalah kode dari helper form untuk pembuka form, HTML yang dihasilkan:
<form action="http://namahost/namaaplikasi/member/register"> echo form_label('Nama Lengkap');

Adalah kode dari helper form untuk label pada form, HTML yang dihasilkan:
<label>Nama Lengkap</label> echo form_input('data[nama_lengkap]');

Adalah kode dari helper form untuk input pada form, HTML yang dihasilkan:
<input name="data[nama_lengkap]" type="text" /> echo form_password('data[password]');

Adalah kode dari helper form untuk password pada form, HTML yang dihasilkan:
<input name="data[nama_lengkap]" type="password" /> echo form_dropdown('data[group]', array('admin' => 'Administrator', 'operator' => 'Operator'));

Adalah kode dari helper form untuk password pada form, HTML yang dihasilkan:
<select name="data[group]"> <option value="admin">Administrator</option> <option value="operator">Operator</option> </select>

si form akan memanggil kembali action tersebut, dan akan dicek apakah data sudah terkirim atau belum, maka tambahkan kode berikut di bawah function __construct() di controller:
... function register() { $form_data = $this->input->post('data'); if (!empty($form_data)) { $form_data['password'] = md5($form_data['password']); $this->account_model->register($form_data); $this->session->set_flashdata('berhasil', 'Pendaftaran berhasil, Anda dapat masuk ke dalam sistem'); redirect('member/login'); } $this->load->view('register'); } ...

pada function register() (kita dapat memanggilnya dengan cara buka http://localhost/aplikasi_keanggotaan/index.php/register), di situ kita membuat variable $form_data, yaitu isi dari variable-variable pada form, yaitu element dari $data. Kita cek apakah data sudah terkirim atau belum? !empty($form_data) artinya tidak kosong variable $form_data, yang artinya sudah terkirim, maka lanjutkan dengan encrypt password dengan function md5, dan panggil function register() pada model account_model. Jika sudah terdaftar, maka alihkan (redirect) ke halaman member/login untuk login. Sekarang, coba cek halaman register dengan cara ketik address bar http://localhost/aplikasi_keanggotaan/index.php/register.
Membuat Halaman Login

Sekarang kita akan membuat halaman login. Tampilannya adalah sebagai berikut:
Form Login Username

Password

Copy code berikut ini, kemudian simpan di /application/views/login.php


<h2>Login Form</h2> <?php echo form_open('member/login') ?> <div class="input"> <?php echo form_label('Username'); echo form_input('data[username]'); ?> </div> <div class="input"> <?php echo form_label('Password'); echo form_password('data[password]'); ?> </div> <div class="submit"> <?php echo form_submit('login', 'Login'); ?> </div> <?php echo form_close() ?>

Untuk form, saya rasa tidak usah dijelaskan lagi, karena saya sudah menjelaskannya di awal. Kita lihat action dari form tersebut adalah member/login, berarti memanggil halaman itu sendiri. Tugas kita adalah mengecek apakah data form login tersebut sudah dikirim atau belum? Nah, berikut ini adalah function login yang diletakkan di controller member.php, tambahkan setelah function register(), sebenarnya di manapun ga ngaruh
... function login() { $form_data = $this->input->post('data'); if (!empty($form_data)) { if ($this->account_model->login($form_data['username'], $form_data['password']))

{ redirect('member/index'); } else { redirect('member/login'); } } $this->load->view('login'); } ...

Di situ ada pengecekan, yaitu apakah $form_data sudah ada (terkirim/submit)? jika sudah ada maka cek lagi, program akan mencoba login dengan menggunakan function login() dari account_model. Jika berhasil login, maka redirect ke member/index, jika tidak berhasil (username/password salah) maka kembali ke halaman login kembali (member/login). Untuk mencobanya, silakan ketikkan pada address bar browser Anda:
http://localhost/aplikasi_keanggotaan/index.php/member/login

Membuat Halaman Member

Sekarang kita akan membuat halaman member, yang hanya bisa diakses jika member sudah login. Buat sebuah file dengan isi sebagai berikut, dan simpan di folder /application/views/member.php
<p>Selamat datang di halaman member, <?php echo $this->session>userdata('username') ?>, Anda login sebagai <?php echo $this->session>userdata('group') ?></p>

Untuk controllernya, buatlah function baru di /application/controllers/member.php


... function index() { if ($this->session->userdata('logged_in')) { $this->load->view('member'); } else { redirect('member/login'); } } ...

Pada function index() ini, ada pengecekan, apakah user sudah login atau belum? jika sudah, maka load view html barusan, sedangkan jika belum, redirect ke halaman login(). Untuk membuktikannya, silakan buka
http://localhost/aplikasi_keanggotaan/index.php/member/

Jika Anda belum login, Anda tidak bisa mengakses halaman tersebut, untuk mengaksesnya, Anda akan dialihkan ke halaman login, dan masukkan username dan password yang benar.
Membuat Function Logout

Buat function logout, terakhir..


... function logout() { $this->account_model->logout(); redirect('member/login'); } ...

Cara aksesnya adalah


http://localhost/aplikasi_keanggotaan/index.php/member/logout

Atau bisa ditambahkan di view member.php menjadi seperti ini:


<p>Selamat datang di halaman member, <?php echo $this->session>userdata('username') ?>, Anda login sebagai <?php echo $this->session>userdata('group') ?>, <?php echo anchor('member/logout','Logout') ?></p>

OK, untuk kode lengkapnya adalah sebagai berikut, saya sebutkan per file:
/application/models/account_model.php
<?php /** * @author cheyuz */ class Account_model extends CI_Model { private $table = 'user'; //isi nama table user di sini function __construct() { parent::__construct(); } function register($data) { $this->db->insert($this->table, $data); } function login($username, $password) { $data = $this->db ->where(array('username' => $username, 'password' => md5($password))) ->get($this->table); //dicek if ($data->num_rows() > 0) { $user = $data->row(); //data hasil seleksi dimasukkan ke dalam $session $session = array( 'logged_in' => 1, 'id_user' => $user->id_user, 'group' => $user->group, 'username' => $user->username, 'nama_lengkap' => $user->nama_lengkap, ); //data dari $session akhirnya dimasukkan ke dalam session (menggunakan library CI) $this->session->set_userdata($session); return true; } else { $this->session->set_flashdata('notification', 'Username dan Password tidak cocok'); return false; } } function logout() {

$this->session->sess_destroy(); } }

application/controller/member.php
<?php /** * Description of member * * @author cheyuz */ class Member extends CI_Controller { function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); $this->load->model('account_model'); } function register() { $form_data = $this->input->post('data'); if (!empty($form_data)) { $form_data['password'] = md5($form_data['password']); $this->account_model->register($form_data); $this->session->set_flashdata('berhasil', 'Pendaftaran berhasil, Anda dapat masuk ke dalam sistem'); redirect('member/login'); } $this->load->view('register'); } function login() { $form_data = $this->input->post('data'); if (!empty($form_data)) { if ($this->account_model->login($form_data['username'], $form_data['password'])) { redirect('member/index'); } else { redirect('member/login'); } } $this->load->view('login'); } function logout() { $this->account_model->logout(); redirect('member/login'); } function index() { if ($this->session->userdata('logged_in')) { $this->load->view('member'); } else { redirect('member/login');

} } }

application/views/login.php
<h2>Login Form</h2> <?php echo form_open('member/login') ?> <div class="input"> <?php echo form_label('Username'); echo form_input('data[username]'); ?> </div> <div class="input"> <?php echo form_label('Password'); echo form_password('data[password]'); ?> </div> <div class="submit"> <?php echo form_submit('login', 'Login'); ?> </div> <?php echo form_close() ?>

application/views/member.php
<p>Selamat datang di halaman member, <?php echo $this->session>userdata('username') ?>, Anda login sebagai <?php echo $this->session>userdata('group') ?>, <?php echo anchor('member/logout','Logout') ?></p>

application/views/register.php
<h2>Form Pendaftaran</h2> <?php echo form_open('member/register') ?> <div class="input"> <?php echo form_label('Nama Lengkap'); echo form_input('data[nama_lengkap]'); ?> </div> <div class="input"> <?php echo form_label('Username'); echo form_input('data[username]'); ?> </div> <div class="input"> <?php echo form_label('Password'); echo form_password('data[password]'); ?> </div> <div class="input select"> <?php echo form_label('Hak Akses'); echo form_dropdown('data[group]', array('admin' => 'Administrator', 'operator' => 'Operator')); ?> </div> <div class="submit"> <?php echo form_submit('register', 'Daftar'); echo form_reset('reset', 'Reset'); ?> </div> <?php echo form_close() ?>

Untuk menjalankannya, buka http://localhost/aplikasi_keanggotaan/index.php/member. Keterangan: Jika Anda ingin menghilangkan index.php pada aplikasi Anda, silakan pelajari tutorial berikut ini: Menghilangkan index.php di Code Igniter untuk di Berbagai Server Selamat mencoba ~ Cheyuz