Codeigniter

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
Administrator Operator

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>
    <?php
    echo form_label('Nama Lengkap');
    echo form_input('data[nama_lengkap]');
    ?>
</div>
<div>
    <?php
    echo form_label('Username');
    echo form_input('data[username]');
    ?>
</div>
<div>
    <?php
    echo form_label('Password');
    echo form_password('data[password]');
    ?>
</div>
<div>
    <?php
    echo form_label('Hak Akses');
    echo form_dropdown('data[group]', array('admin' => 'Administrator', 'operator' => 'Operator'));
    ?>    
</div>
<div>
    <?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>
    <?php
    echo form_label('Username');
    echo form_input('data[username]');
    ?>
</div>
<div>
    <?php
    echo form_label('Password');
    echo form_password('data[password]');
    ?>
</div>
<div>
    <?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>
    <?php
    echo form_label('Username');
    echo form_input('data[username]');
    ?>
</div>
<div>
    <?php
    echo form_label('Password');
    echo form_password('data[password]');
    ?>
</div>
<div>
    <?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>
    <?php
    echo form_label('Nama Lengkap');
    echo form_input('data[nama_lengkap]');
    ?>
</div>
<div>
    <?php
    echo form_label('Username');
    echo form_input('data[username]');
    ?>
</div>
<div>
    <?php
    echo form_label('Password');
    echo form_password('data[password]');
    ?>
</div>
<div>
    <?php
    echo form_label('Hak Akses');
    echo form_dropdown('data[group]', array('admin' => 'Administrator', 'operator' => 'Operator'));
    ?>    
</div>
<div>
    <?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

 

sumber :

http://harian.cheyuz.com/tutorial/tutorial-codeigniter-dasar-part-v-user-accounts-chapter-2

About Suendri

Owner dan Founder Go Software Media sebelumnya bernama PHPBeGO Foundation

Discussion

No comments yet.

Tinggalkan Komentar

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow Go Software Media Blog on WordPress.com

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 63 other followers

Archives

%d bloggers like this: