Friday, April 15, 2011

Membuat Guest Book Dengan CodeIgniter

Iseng-iseng sambil nyambi mengerjakan tugas kuliah, saya mau berbagi sedikit ilmu yang saya pelajari dari training kecil dengan bahasan codeigniter di GUCC Universitas Gunadarma. Sebenarnya sudah agak lama saya tidak melanjutkan mempelajari codeigniter apalagi menulis tentang CI ini. Tapi tak ada salahnya berbagi dan belajar untuk coba untuk membuat guest book sederhana.

Karena masih dalam tahap belajar jadi buat yang simpel saja dulu, satu buah form input guest book untuk memberikan komentar atau sekedar pesan bagi para pengunjung website yang nantinya akan disimpan di database. Kemudian sebuah halaman untuk menampilkan daftar komentar yang diambil dari database.

Sebelumnya integrasikan dulu codeigniter dengan database. Hampir lupa kalau kali ini database yang digunakan maih MySQL dan tools GUI nya saya pakai Chive. Chive ini sendiri salah satu alternatif dari phpmyadmin yang user interface-nya cukup eye catching.

Cara untuk mengintegrasikan CI dengan MySQL cukup mudah, hanya dengan merubah sedikit file database.php yang ada di folder application/config. Terlebih dahulu kita buat sebuah database baru dengan nama belajar_ci, kemudian sebagian isi dari database.php menjadi seperti dibawah ini :

$active_group = "default";
$active_record = TRUE;

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";   //ubah sesuai username dari mysql
$db['default']['password'] = "";         //ubah sesuai password untuk login ke mysql dgn user diatas
$db['default']['database'] = "belajar_ci";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";


Setelah integrasi database, kita lanjutkan dengan membuat rancangan tabel di database terlebih dahulu. Karena bussiness logic nya masih sederhana saya pikir tidak perlu tabel yang terlalu rumit, setidaknya bisa menggambarkan bagaimana data disimpan.

Pertama kita buat satu tabel tb_guestbook. Saya gunakan prefix tb_ supaya mempermudah pemahaman. Struktur dari tabelnya sebagai berikut :



Kemudian langkah selanjutnya yaitu mencoba untuk membuat fitur tambah komentar beserta form guestbook untuk input data baru. Untuk sebuah page di CI setidaknya dibutuhkan satu buah controller, dimana controller ini merupakan pusat operasi atau application logic dari page tersebut. Untuk guestbook ini kita akan buat sebuah controller guestbook.php di folder application/controllers.

Lalu kita buat sebuah function baru sebagai tampilan awal guestbook berupa isian komentar sebagai berikut :

load->helper('form');
    }
   
    public function index() {
        $this->addComment();
    }
   
    public function addComment(){
        $this->load->view('form_guestbook');
    }
}
?>


Bisa dilihat bahwa function index merupakan function default controller, jadi kita bisa mengakses function ini tanpa harus secara eksplisit menuliskannya di url. Namun, kita hanya memakai function addComment jadi dalam function index kita bisa sisipkan kode seperti yang terlihat diatas untuk memanggil function addComment

Perhatikan sintaks $this->load->view('form_guestbook') pada function addComment. sintaks tersebut berarti kita meminta resource atau load view dengan nama form_guestbook. Untuk itu kita harus membuat sebuah file view baru dengan nama file form_guestbook.php di folder application/views. Pada file view ini sintaks tidak murni PHP melainkan bisa berupa tag-tag html, sintaks javascript, ataupun css. Berikut ini source dari form_guestbook :

Guest Book

    <table width="100%" border="0">
      <?php echo form_open('guestbook/addComment'); ?>
<tr>
          <td colspan="2" align="center" style="font-size:90%;">
   <?php print @$message; ?>
            <?php print validation_errors(); ?>
          </td>
      </tr>
<tr>
        <td align="right">name :</td>
        <td>&nbsp;<?php print form_input('name', $this->input->post('name'), 'size="39" maxlength="11"'); ?></td>
      </tr>
<tr>
        <td align="right">email :</td>
        <td>&nbsp;<?php print form_input('email', $this->input->post('email'), 'size="39"'); ?></td>
      </tr>
<tr>
        <td align="right">comment :</td>
  <?php $textarea_comment = Array("name"=>"comment", "value"=>$this->input->post('comment'), "cols"=>"30", "rows"=>"4"); ?>
        <td>&nbsp;<?php print form_textarea($textarea_comment); ?></td>
      </tr>
<tr>
          <td colspan="2" align="right">
            <?php
               print form_submit('mysubmit', 'Submit', 'style="height:30px; width:80px;"');
               print form_close();
            ?>
          </td>
      </tr>
</table>


Perhatikan action dari form yaitu guestbook/addComment, ini berarti form tersebut akan disubmit ke class guestbook, function addComment untuk dilakukan proses selanjutnya yaitu penyimpanan data.

Karena kita sudah membuat function addComment, maka kita hanya harus melengkapinya untuk membuat sebuah validasi input sederhana lalu menyimpan data yang sudah valid dengan bantuan model. Tambahkan kode dari function addComment menjadi seperti dibawah ini :

input->post('mysubmit')){
            $this->load->library('form_validation');
            $form_rules = array(array('field'=>'name',
                                      'label'=>'Name',
                                      'rules'=>'trim|required'
                                      ),
                                array('field'=>'email',
                                      'label'=>'Email',
                                      'rules'=>'trim|required|valid_email'
                                      ),
                                array('field'=>'comment',
                                      'label'=>'Comment',
                                      'rules'=>'trim|required'
                                      )
                                );
            $this->form_validation->set_rules($form_rules);
            if($this->form_validation->run() == TRUE){
                $this->load->model('md_guestbook', 'guestbook');
                $new['name'] = $this->input->post('name', TRUE);
                $new['email'] = $this->input->post('email', TRUE);
                $new['comment'] = $this->input->post('comment');
                $insert = $this->guestbook->add($new);
                if($insert == TRUE){
                    $data['message'] = "Comment submited successfully!";
                }else{
                    $data['message'] = "Submit failed! Please try again.";
                }
            }
        }
        $this->load->view('form_guestbook', $data);
    }
?>


Terlihat bahwa langkah selanjutnya kita membutuhkan sebuah model untuk tb_guestbook. Model kita beri nama md_guestbook.php dan di simpan di folder application/models. Model ini memiliki nama class Md_guestbook, isinya berupa kumpulan function yang nantinya kita gunakan untuk berinteraksi dengan database. Terlihat pada controller model ini dapat diberi alias guestbook dan dipanggil dengan menggunakan sintaks $this->load->model('md_guestbook', 'guestbook');

Langkah selanjutnya buat function baru pada model yang berfungsi untuk menyimpan komentar baru dengan menggunakan parameter sebagai input data baru tersebut.

load->database();
        }
          
        public function add($data){
            foreach($data as $field=>$value){
                if($field!='id')
                    $this->db->set($field, $value);
            }
            $result = $this->db->insert($this->tb_name);
            if($this->db->affected_rows()>0) {
                $this->insert_id = $this->db->insert_id();
                return true;
            }else{
                return false;
            }
        }
    } 
?>


Sampai disini seharusnya form sudah bisa menyimpan komentar baru ke database. cmiww

Yap, berhubung besok pagi kebetulan ada kuis dan saya juga belum tidur (saya menulis postingan ini pukul 3:54). Sekian dulu curhatan tengah malam saya, semoga bisa bermanfaat, maaf sebelumnya jika masih banyak penjelasan yang kurang karena saya juga masih tahap belajar.. :D

4 comments:

  1. ini ga ada kodingnya?? atau bikin sendiri aja kodingnya??
    ga ngerti lah

    ReplyDelete
    Replies
    1. maaf gan, kodingannya ini memang cuma sepotong karena cuma sebagai overview saja. mungkin dilain kesempatan saya post yang lebih bagus.

      Delete
  2. itu pux di submit kok error yah,.,

    ReplyDelete
    Replies
    1. kalo boleh tau errornya apa ya? biar sama-sama dicari solusinya..

      Delete