di sini" />
  • Tutorial CodeIgniter Dasar Part V – User Accounts Chapter 1

    Level: MEDIUM

    Sebenarnya ini adalah salah satu permintaan dari pembaca, yaitu membuat tutorial bagaimana membuat penanganan akun di dalam CI.. Kali ini kita menggunakan Codeigniter versi 2.x ke atas… (bukan untuk CI 1.7.x), lihat perbedaan CI 2.x dengan CI v1.7.x di sini

    Sebelum kita mengenal lebih jauh, sebaiknya kita mengenal pemahaman dari segi konsep bagaimana akun dibuat.. Mulai dari konsep session, register, login, dan logout..

    Baik, kita jelaskan satu persatu ya.. Dengan bahasa saya sendiri, mudah2an temen2 mengerti ya… hehe..

    Session

    Session adalah sebuah varibel yang diletakkan di server. Dengan begitu, PHP bisa mengambil nilai yang tersimpan di dalam variable tersebut meskipun kita membuka halaman baru di browser. Biasanya session akan hilang jika anda menutup browser atau dengan time out yang ditentukan. Session sangat diperlukan untuk penanganan login user/pengguna, yang mana nantinya beberapa data penting pengguna disimpan di dalam variable session, seperti status login, id user, nama user, dan nama group (group = kategori user). Oleh karena itu, ketika tab baru dibuka pun kita masih bisa mengakses data kita dengan asumsi kita sudah login ke dalam aplikasi tersebut.

    Register

    Register adalah bagaimana kita mendaftarkan user ke dalam database. Database mempunyai data user yang sewaktu2 dapat dipakai untuk login user. Proses dari register hanyalah penambahan data user ke dalam database dari form registrasi yang nanti kita buat.

    Login

    Login adalah proses di mana proses pengecekan user dilakukan. Pengecekan dilakukan untuk memeriksa apakah username dan password cocok atau tidak, jika ada dalam database dan cocok maka data akan dimasukkan ke dalam session, status login diset menjadi TRUE, dan data session lainnya akan diisikan dengan data user yang ada di dalam database.

    Logout

    Logout adalah sebaliknya dari Login. Logout adalah proses penghancuran data di variable session, yang berarti data2 di variable session dihapus. Jika data session dihapus, maka statusnya sekarang adalah tidak login, jadi bisa disebut ‘keluar dari sistem’.

     

    OK, langsung saja kita berangkat ke CI… ;)

    Buat Table

    Sebelum ke pembuatan model, controller, dan view tentu saja yang harus dilakukan pertama kali adalah pembuatan database, dalam hal ini kita akan membuat sebuah table user yang berisi id_user, nama_lengkap, username, password, dan group… Saya kasih contoh sederhana seperti ini, yang mana sebetulnya masih bisa dikembangkan, misalnya penambahan status, verifikasi email, reset password, dan sebagainya… Tapi berhubung tidak memungkinkan dan terlalu rumit, maka saya buat contoh sederhana aja.. :)

    Buat table user dengan mengcopy syntax SQL berikut ke PhpMyAdmin kamu beserta data sample:

    CREATE TABLE  `user` (
    `id_user` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `nama_lengkap` VARCHAR( 100 ) NOT NULL ,
    `username` VARCHAR( 50 ) NOT NULL ,
    `password` VARCHAR( 50 ) NOT NULL ,
    `group` VARCHAR( 20 ) NOT NULL
    ) ENGINE = INNODB;
     
     
    INSERT INTO  `user` (
    `id_user` ,
    `nama_lengkap` ,
    `username` ,
    `password` ,
    `group`
    )
    VALUES
     (NULL , 'Cecep Yusuf', 'cheyuz', MD5('cheyuz') , 'admin'),
     (NULL , 'Ayu Dwi S', 'ayue', MD5('ayue') , 'operator');
    Catatan: group adalah kategori dari user tersebut, misalnya: administrator, operator, member, dan sebagainya.

    Buat Model Account

    Sebelum kita membuat controller dan view untuk registrasi, login, dan logout, pertama2 kita harus membuat modelnya terlebih dahulu.. model apakah itu? Yup, model untuk account nya… kita buat account_model.php di direktori /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();
        }
     
    }

    Di dalam class Account_model terdapat variable private $table, yang nantinya function2 di bawah akan mengakses variable itu, dari table mana data didapatkan.
    Setelah class dibuat, maka harus dibuat fungsi2 dalam class tersebut. Fungsi2 yg perlu kita buat adalah function register, login, dan logout, juga ada fungsi2 tambahan lainnya.

    Tambahkan function register di dalam class tersebut:

    ...
        function register($data)
        {
        }
    ...

    di dalam function register terdapat parameter $data. Parameter ini adalah berupa array yang mana nantinya data dari form registrasi dimasukkan ke dalam database, maka di dalam function register() ditambahkan kode berikut ini:

    ...
        function register($data)
        {
            $this->db->insert($this->table, $data);
        }
    ...

    Setelah function register dibuat, maka selanjutnya tambahkan function login di dalam class tersebut:

    ...
        function login($username, $password)
        {
        }
    ...

    Di atas terlihat bahwa ada dua parameter, yaitu $username dan $password. Ini berguna buat nanti kita cek apakah usernamenya ada atau tidak, cocok atau tidak dengan passwordnya. Dan setelah itu isi function tersebut dengan kode di bawah ini:

    ...
        function login($username, $password)
        {
            $data = $this->db
                    ->where(array('username' => $username, 'password' => md5($password)))
                    ->get($this->table);
        }
    ...

    $data adalah seleksi dari syntax SQL:

    SELECT * FROM `user` WHERE `username`= $username AND `password` = md5($password)

    Kemudian hasil tersebut dicek apakah ada dan cocok username dengan passwordnya atau tidak, ada berarti jika banyak baris lebih dari 0 (nol menyatakan bahwa tidak ada yang terseleksi).
    Nah di bawah ini cara ngeceknya memakai if…

            ....
     
            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
                );
     
                //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;
            }
     
            ....

    berikut ini adalah function login() secara lengkap:

        ...
        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
                );
     
                //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;
            }
        }
        ...

    Nah, kemudian setelah itu dibuat function logoutnya…
    Ingat bahwa logout adalah menghapus session, maka scriptnya sederhana, cukup dengan function $this->session->sess_destroy();

        ...
        function logout()
        {
            $this->session->sess_destroy();
        }
        ...

    Sehingga kode PHP lengkapnya untuk class Account_model adalah sebagai berikut:

    <?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();
        }
    }

    Untuk menggunakannya, caranya cukup dengan meload model tersebut, kemudian masukkan variable post dari form login ke dalam parameter dari function login() di model account_model…

    Salah satu contoh penggunaan di controller:

    ...
        function masuk()
        {
            $post = $this->input->post('login');
            if($post==NULL)
            {
                $this->load->view('login');
            }
            else
            {
                if($this->account_model->login($post['username'], $post['password']))
                {
                     redirect('member');
                }
                else
                {
                     redirect('member/login');
                }
            }
        }
    ...
    }

    Kode di atas hanya contoh saja, contoh lengkapnya akan dilanjutkan pada tutorial ini juga (part II)… cape hehe mau lanjut kerja dulu.. :P
    Pada tutorial selanjutnya saya lanjut lengkap dengan form registrasi, form login, controller: daftar, masuk, dan keluar sistem….

    coming soon ya.. ;)

    ~ Cheyuz

    This entry was posted on Sunday, June 19th, 2011 at 18:03 and is filed under Code Igniter, PHP, Tutorial. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
  • 22 Comments

    Take a look at some of the responses we have had to this article.

    1. kaz
      Jun 19th

      ah bukannya kemarin bikin yg gini th :( (

    2. kerenzz kang :)
      terimakasih ilmunya :)

    3. Jun 19th

      @kaz: hehehe iya kaz.. telat haha..

    4. Jun 19th

      @rinda: sip2 Rinda, sama2 :)

    5. galih
      Jun 20th

      udah ga sabat nunggu yang part 2 :)

    6. Jun 20th

      @galih: ok gan, nanti ane update malem ini ;)

    7. david
      Jun 28th

      tutornya mantab, kapan nih part 2 nya ? udh ngga sabar euy.. :)

    8. Jun 28th

      @david: thanks gan… part II bakal dibuat secepatnya hehe..

    9. rei
      Jul 5th

      gan ada tutorial CI buat menampilkan /membuat recent comment, recent post dan most popular post gak?
      ane pengen pake widget2 ini buat di sidebar kaya wp gituh…
      thx…

    10. darma
      Jul 9th

      gan, share tutorial shopping cart untuk codeigniter dong, yg ada fasilitas update, delete, create
      thx gan sebelumnya.
      ane selalu tunggu tutorial2 dr agan, isi nya mudah dimengerti gan, pa lagi buat nubi kyk ane.

    11. dwi
      Aug 14th

      kapan nih bagian ke duanya di buat ,cepetan di buat ya gan.. Thanks

    12. newbieSMG
      Aug 18th

      gan tolong jelaskan tentang databasenya untuk password? di database tuh passwordnya hasil enkripsi dari md5 apa bukan??

      code ini untuk enkrip pass ke md5 betul ga?
      ->where(array(‘username’ => $username, ‘password’ => md5($password)))

    13. AsGar
      Aug 26th

      yang part 2 nya belum kang?diantos.

    14. Aug 26th

      gan ada tutorial CI buat menampilkan /membuat recent comment, recent post dan most popular post gak?
      ane pengen pake widget2 ini buat di sidebar kaya wp gituh…
      thx…

      Itu tinggal querynya aja gan, sama aja.. querynya select beberapa data terkini, pake ORDER BY DATE DESC

    15. Aug 26th

      gan, share tutorial shopping cart untuk codeigniter dong, yg ada fasilitas update, delete, create
      thx gan sebelumnya.
      ane selalu tunggu tutorial2 dr agan, isi nya mudah dimengerti gan, pa lagi buat nubi kyk ane.

      @darma: OK nanti berurutan gan :)

    16. Sep 20th

      kapan nih bagian ke duanya di buat ,cepetan di buat ya gan.. Thanks

      @dwi: Tunggu tanggal mainnya hehe

    17. Sep 23rd

      Kalo diterapkan di versi 1.7.x bisa tidak mas? Atau yang harus diubah bagian mana?

    18. Oct 23rd

      update bang..
      kentang nih…

    19. Oct 26th

      Hal-hal yang paling sulit menurut Saya bagi seseorang yang baru pertama kali melihat kode ini adalah: NARUH KODENYA DI MANA?????

    20. Oct 31st

      yang part 2 nya belum kang?diantos.

      @AsGar: iya gan.. belum, nanti ya gan.. hehe

    21. Oct 31st

      Kalo diterapkan di versi 1.7.x bisa tidak mas? Atau yang harus diubah bagian mana?

      @arif: http://harian.cheyuz.com/knowledge/perubahan-pada-codeigniter-v2-x-dengan-v1-7-x

    22. Oct 31st

      Hal-hal yang paling sulit menurut Saya bagi seseorang yang baru pertama kali melihat kode ini adalah: NARUH KODENYA DI MANA?????

      @Hompimpa: coba agan baca dulu yg ini: http://harian.cheyuz.com/_other/tutorial-codeigniter-dasar-part-i

  • Leave a Reply

    Let us know what you thought.

  • Name(required):

    Email(required):

    Website:

    Message:

    Spam Protection by WP-SpamFree