You are on page 1of 35

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` )

Catatan: group adalah kategori dari user tersebut, misalnya: administrator, operator, member, dan sebagainya.

VALUES (NULL , 'Cecep Yusuf', 'cheyuz', MD5('cheyuz') , 'admin'), (NULL , 'Ayu Dwi S', 'ayue', MD5('ayue') , 'operator');

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:

...

...

$data adalah seleksi dari syntax SQL:

function login($username, $password) { $data = $this->db ->where(array('username' => $username, 'password' => md5($password))) ->get($this->table); } ... 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); } else { $this->session->set_flashdata('notification', 'Username dan Password tidak cocok'); }

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

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

//data dari $session akhirnya dimasukkan ke dalam session (menggunakan library CI) $this->session->set_userdata($session); } else { $this->session->set_flashdata('notification', 'Username dan Password tidak cocok'); } } ...

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); } else { $this->session->set_flashdata('notification', 'Username dan Password tidak cocok'); } } 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 { $this->account_model->login($post['username'], $post['password']); redirect('home'); } } ... }

Validasi Input Form memang diperlukan untuk kebenaran nilai dari suatu data. Misalnya, untuk input E-Mail, kita harus mengisikan format yang sesuai/valid dengan format email, contohnya: cheyuz@yahoo.co.id, cheyuz@gmail.com, cheyuz@cheyuz.uk, dan sebagainya. Untuk input Nama misalnya tidak boleh dikosongkan, jika isian kosong maka data tidak akan disubmit ke server, melainkan akan munculnya laporan bahwa data terdapat kesalahan, yaitu belum diisi. Hampir semua input form menggunakan validasi. Untuk contoh pada tutorial ini, kita akan membuat validasi untuk form Registrasi (Pendaftaran pada suatu situs), yang input dan aturannya adalah sebagai berikut: - Nama depan (wajib diisi) - Nama belakang (optional) - Alamat (wajib diisi) - E-Mail (wajib diisi, harus format E-Mail)

- No Telepon (optional, harus nomor) - Pekerjaan (optional) - Username (wajib diisi, minimal 6 karakter) - Password (wajib diisi, minimal 6 karakter) - Konfirmasi Password (wajib diisi, harus sama dengan password) Dengan menggunakan Codeigniter, Anda bisa membuat validasi form dengan mudah, karena Codeigniter sudah menyediakan library untuk Form Validation. Untuk mengikuti tutorial ini, diharapkan Anda sudah menghilangkan index.php yang ada di tutorial ini: http://harian.cheyuz.com/_other/menghilangkan-index-php-di-code-igniter-untukdi-berbagai-server dan mengeset base_url() dengan http://localhost/webku dan sedikitnya sudah paham semua materi yang ada di Tutorial Dasar CI Part I, Tutorial Dasar CI Part II, dan Tutorial Dasar CI Part III. Untuk tutorial ini, kita tidak akan fokus kepada database, tetapi kepada validasi form, jadi saya tidak akan membuat model registrasi_model, melainkan Anda explore sendiri bagaimana cara memasukkan data ke dalam database yang sudah dipelajari di Tutorial Dasar Sebelumnya. OK, kita mulai aja, langkah pertama, buatlah sebuah controller kosong registrasi.php dengan isi file sebagai berikut:
<?php /** * @author cheyuz */ class Registrasi extends Controller { function __construct() { parent::Controller(); } //code }

Kemudian, langkah pertama yang harus dilakukan adalah meload helper Form dan library form_validation yang sudah disediakan oleh Codeigniter ke dalam controller kita, caranya tambahkan kode $this->load->helper('form') $this->load>library('form_validation') di dalam function __construct() , jadi sekarang code di dalam __construct menjadi seperti ini:
... function __construct() { parent::Controller(); $this->load->helper('form'); $this->load->library('form_validation'); } ...

Sejauh ini Anda sudah menggunakan library Form Validation, sekarang tinggal buat function index() di dalam controller supaya kita bisa mengakses di dalam URL dengan bentuk seperti ini: http://localhost/webku/registrasi. Tambahkan function index() setelah function __construct() dibuat.. jadi kode lengkapnya seperti ini:

<?php /** * @author cheyuz */ class Registrasi extends Controller { function __construct() { parent::Controller(); $this->load->helper('form'); $this->load->library('form_validation'); } function index() { } }

kemudian, buatlah view di dalam folder /system/application/views/ dengan nama: registrasi_view.php yang isinya berupa html form sebagai berikut:
<h2>Registrasi</h2> <?php echo form_open('registrasi') ?> <table> <tr> <td>Nama depan</td> <td><?php echo form_input('nama_depan') ?></td> </tr> <tr> <td>Nama belakang</td> <td><?php echo form_input('nama_belakang') ?></td> </tr> <tr> <td>Alamat</td> <td><?php echo form_textarea('alamat') ?></td> </tr> <tr> <td>E-Mail</td> <td><?php echo form_input('email') ?></td> </tr> <tr> <td>No Telepon</td> <td><?php echo form_input('no_telepon') ?></td> </tr> <tr> <td>Pekerjaan</td> <td><?php echo form_input('pekerjaan') ?></td> </tr> <tr> <td>Username</td> <td><?php echo form_input('username') ?></td> </tr> <tr> <td>Password</td> <td><?php echo form_password('password') ?></td> </tr> <tr>

<td>Konfirmasi Password</td> <td><?php echo form_password('konfirmasi_password') ?></td> </tr> <tr> <td></td> <td><?php echo form_submit('daftar','Daftar') ?></td> </tr> </table> <?php echo form_close() ?>

Setelah view dibuat, baru kita tambahkan kode untuk meload view tersebut, yaitu: $this>load->view('registrasi'); ini kita simpan di function index(). Setelah itu, kita buat aturan untuk validation tadi, caranya yaitu dengan menambahkan array berupa rules2 tadi dengan bentuk seperti berikut:
$rules = array( array( 'field' 'label' 'rules' => [nama input field] => [label] => [aturan]

), //dan seterusnya ... );

Jadi, secara lengkap buatlah $rules tersebut sebelum view diload, lengkapnya seperti berikut:
... $rules= array( array( 'field' => 'nama_depan', 'label' => 'Nama Depan', 'rules' => 'required' ), array( 'field' => 'alamat', 'label' => 'Alamat', 'rules' => 'required' ), array( 'field' => 'email', 'label' => 'E-Mail', 'rules' => 'required|valid_email' ), array( 'field' => 'no_telepon', 'label' => 'No Telepon', 'rules' => 'numeric' ), array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required|min_length[6]' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required|min_length[6]| matches[konfirmasi_password]' ),

...

); $this->form_validation->set_rules($rules);

array( 'field' => 'konfirmasi_password', 'label' => 'Konfirmasi Password', 'rules' => 'required' ),

Setelah itu, ada pengecekan apakah data sudah dikirim atau belum dengan cara memakai if, kodenya seperti berikut:
if ($this->form_validation->run() == FALSE) { //jika belum dikirim/belum valid, masukkan kode di sini } else { //jika sudah valid, masukkan kode INSERT di sini }

Di atas ada pengecekan jika belum dikirim/belum valid, di dalam bagian itu pindahkan kode $this->load->view('registrasi'); ke dalam statemen ini. Jadi, jika kita lihat, code lengkapnya seperti ini:
function index() { $rules = array( array( 'field' => 'nama_depan', 'label' => 'Nama Depan', 'rules' => 'required' ), array( 'field' => 'alamat', 'label' => 'Alamat', 'rules' => 'required' ), array( 'field' => 'email', 'label' => 'E-Mail', 'rules' => 'required|valid_email' ), array( 'field' => 'no_telepon', 'label' => 'No Telepon', 'rules' => 'numeric' ), array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required|min_length[6]' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required|min_length[6]| matches[konfirmasi_password]' ), array( 'field' => 'konfirmasi_password', 'label' => 'Konfirmasi Password',

),

'rules' => 'required'

); $this->form_validation->set_rules($rules); if ($this->form_validation->run() == FALSE) { $this->load->view('registrasi'); } else { echo 'Data berhasil dimasukkan'; //kode insert ke database di model--> contoh: $this>registrasi_model->insert(); } }

Kode di Controller sudah selesai, kini Anda tinggal buat daftar error dari validation di view, caranya yaitu dengan menambahkan kode di bawah sebelum tag form..
<h2>Registrasi</h2> <?php echo validation_errors(); ?> <?php echo form_open('registrasi') ?> <table> ... ...

Tutorial selesai. Kini Validasi Form Anda siap digunakan, untuk mencobanya silakan kosongkan atau salahkan isi inputan Anda, kemudian submit! Jika data sudah benar, maka muncul tulisan Data sudah dimasukkan. Jika data masih salah, maka browser akan menampilkan form kembali dan menampilkan error yang ada dalam kesalahan inputan. Selain itu, Anda bisa membuat rules di dalam config Anda, caranya buatlah sebuah file bernama form_validation.php di dalam /system/application/config/ dengan isi sebuah variable $config (HARUS $config) yg isinya adalah array rules yang sudah kita buat tadi. form_validation.php
<?php $config = array( array( 'field' => 'label' => 'rules' => ), array( 'field' => 'label' => 'rules' => ),

'nama_depan', 'Nama Depan', 'required' 'alamat', 'Alamat', 'required'

... /* dan seterusnya sama seperti tadi */ );

Dan hapus kode $this->form_validation->set_rules($rules); di controller (jika memakai config itu). Dengan demikian, code di Controller akan lebih sedikit dari sebelumnya.

Multiple Input Form adalah suatu bentuk form di mana kita akan menginputkan banyak data ke dalam database melalui form secara sekaligus. Jadi kita tidak menginputkan data satu persatu.

Form Input Mahasiswa


NIM: Nama: Alamat:
0700335 Cecep Yus Cianjur

Jika kita memakai cara yang di atas, maka kita harus menginputkan mahasiswa satu persatu. Bayangkan gimana kalo kita ingin menginputkan 50 data? Tentu kita harus mengisi form sebanyak 50 kali bukan? Coba lihat form berikut ini:

Form Input Mahasiswa


NIM
0700335 0900634

Nama
Cecep Yus Sabrina

Alamat
Cianjur Cianjur

Coba Anda lihat, apa bedanya cara pertama dengan cara kedua? keliatan kan? Nah, jadi bedanya apabila kita memakai cara kedua, kita dapat menginput beberapa siswa sekaligus. Di sini kita akan membuat 3 bagian modul, yaitu: 1. Form untuk mengisi berapa data yang akan dimasukkan 2. Form untuk pengisian form multiple 3. Daftar data yang telah dimasukkan Catatan: Diasumsikan base_url() untuk tutorial ini adalah http://localhost/webku dan index.php telah dihilangkan.. tutorial untuk menghilangkan index.php ada di sini Pertama2 buat dulu database sebagai berikut:
CREATE TABLE IF NOT EXISTS mahasiswa ( id int(5) NOT NULL AUTO_INCREMENT, `nim` varchar(20) NOT NULL, `nama` varchar(100) NOT NULL, `alamat` text NOT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

Jangan lupa cek koneksi ke database apakah sudah benar atau belum.. konfigurasi untuk koneksi database ada di /system/application/config/database.php. Buatlah sebuah controller data_mahasiswa.php (atau Anda bisa melanjutkan tutorial dari Tutorial Dasar Part I untuk membuat controller data_mahasiswa.php dan melanjutkannya). Di controller tersebut, tambahkan function untuk membuat tampilan multiple input form:

<?php class Data_mahasiswa extends Controller { ... function add_multiple() { $this->load->view('add_multiple'); } } ?>

Setelah kamu bikin controller di atas, kamu tinggal bikin view untuk tampilan formnya, dengan cara membuat file add_multiple.php di folder /system/application/view Isikan code HTML berikut di file tersebut:
<h2>Multiple Form Input Mahasiswa</h2> <form action="" method="post"> Banyak mahasiswa yang ingin dimasukkan: <input name="banyak_data" size="3" /> orang<br /> <input type="submit" value="Lanjut" /> </form>

Maka hasilnya seperti berikut:

Multiple Form Input Mahasiswa


Top of Form

Banyak mahasiswa yang ingin dimasukkan: orang


Bottom of Form

Kemudian tambahkan code berikut untuk function add_multiple() file controller data_mahasiswa.php tadi, menjadi seperti berikut:
<?php class Data_mahasiswa extends Controller { ... //ADD MULTIPLE function add_multiple() { if($_POST==NULL) { $this->load->view('add_multiple'); }else{ redirect('data_mahasiswa/add_multiple_post/'. $_POST['banyak_data']); } } } ?>

Maksud dari function di atas adalah meload view add_multiple.php yang berisi halaman input banyak data mahasiswa yang dimasukkan.. kemudian ketika disubmit (POST) maka akan di-redirect/alihkan ke function add_multiple_post() dengan parameter banyaknya data yg dimasukkan ($_POST['banyak_data']) yang akan kita buat nanti yaitu halaman munculnya multiple form. Tambahkan function berikut di bawah function add_multiple():
class Data_mahasiswa extends Controller { ...

function add_multiple_post($banyak_data=0) { $data['banyak_data'] = $banyak_data; $this->load->view('add_multiple_form',$data); }

Kemudian, buatlah tampilan multiple form input seperti gambar table di atas. Berikut ini adalah kode HTML dari add_multiple_form.php, simpan di /system/application/views:
<h2>Multiple Form Input Mahasiswa</h2> <form action="" method="post"> <table> <tr> <td>NIM</td> <td>Nama</td> <td>Alamat</td> </tr> <?php for($i=1;$i<=$banyak_data;$i++): ?> <tr> <td><input name="data[<?php echo $i ?>][nim]" /></td> <td><input name="data[<?php echo $i ?>][nama]" /></td> <td><input name="data[<?php echo $i ?>][alamat]" /></td> </tr> <?php endfor ?> </table> <input type="submit" value="simpan" /> </form> http://localhost/webku/data_mahasiswa/add_multiple_post/3

Multiple Form Input Mahasiswa


Top of Form

No NIM 1 2 3

Nama

Alamat

Bottom of Form

http://localhost/webku/data_mahasiswa/add_multiple_post/5

Multiple Form Input Mahasiswa


Top of Form

No NIM 1 2 3 4

Nama

Alamat

5
Bottom of Form

Kemudian, tambahkan if dan foreach di function add_multiple_post tadi, fungsinya adalah untuk mengetahui apakah form udah disubmit atau belum jadi kode PHP lengkapnya sbb:
<?php class Data_mahasiswa extends Controller { ... function add_multiple_post($banyak_data=0) { if($_POST==NULL) { $data['banyak_data'] = $banyak_data; $this->load->view('add_multiple_form',$data); }else { foreach($_POST['data'] as $d){ $this->db->insert('mahasiswa',$d); } redirect('data_mahasiswa/lihat_data'); } } } ?>

OK, aku jelasin ya untuk function add_multiple_post():


1. Data dicek dulu apakah sudah disubmit ato belum ($_POST==NULL), kalo belum,

load view add_multiple_form.php dengan variable $banyak_data yang diambil dari parameter berdasarkan data yg dimasukkan sebelumnya (di function add_multiple(), yaitu $_POST['banyak_data'])
2. Kalo datanya udah disubmit, maka lakukan insert data yang berulang sebanyak

elemen dari $_POST['data'] (berdasarkan $banyak_data) ke dalam table mahasiswa dengan data dari $_POST['data'] (input-an dari multiple form)
3. Kemudian redirect/alihkan ke function lihat_data untuk menampilkan seluruh data

mahasiswa yang akan kita buat setelah ini. Nah, sekarang kita tinggal bikin daftar data mahasiswa yang sudah dimasukkan.. Caranya, buat file list_mahasiswa.php di /system/application/views/ dengan isi sebagai berikut: list_mahasiswa.php:
<h2>Daftar Mahasiswa</h2> <table> <tr> <th>No</th> <th>NIM</th> <th>Nama</th> <th>Alamat</th> </tr> <?php $i = 0 ?> <?php foreach($mahasiswa as $m): ?> <tr> <td><?php echo $i++ ?></td> <td><?php echo $m->nim ?></td>

<td><?php echo $m->nama ?></td> <td><?php echo $m->alamat ?></td> </tr> <?php endforeach ?> </table> <?php echo anchor('data_mahasiswa/add_multiple','Tambah Data') ?>

Lalu buat function-nya di Controller data_mahasiswa.php:


<?php class Data_mahasiswa extends Controller { ... function lihat_data(){ $data['mahasiswa'] = $this->db->get('mahasiswa')->result(); $this->load->view('list_mahasiswa',$data); }

} ?>

Selesai. Berikut ini adalah source code lengkapnya:


/system/application/controllers/data_mahasiswa.php class Data_mahasiswa extends Controller { //... //... function2 yg ada di tutorial sebelumnya //... //ADD MULTIPLE function add_multiple() { if($_POST==NULL) { $this->load->view('add_multiple'); }else { redirect('data_mahasiswa/add_multiple_post/'. $_POST['banyak_data']); } } function add_multiple_post($banyak_data=0) { if($_POST==NULL) { $data['banyak_data'] = $banyak_data; $this->load->view('add_multiple_form',$data); }else { foreach($_POST['data'] as $d){ $this->db->insert('mahasiswa',$d); } redirect('data_mahasiswa/lihat_data'); } } function lihat_data(){ $data['mahasiswa'] = $this->db->get('mahasiswa')->result(); $this->load->view('list_mahasiswa',$data); } } /system/application/views/add_multiple.php <h2>Multiple Form Input Mahasiswa</h2> <form action="" method="post"> Banyak mahasiswa yang ingin dimasukkan: <input name="banyak_data" size="3" /> orang<br /> <input type="submit" value="Lanjut" />

</form> /system/application/views/add_multiple_form.php <h2>Multiple Form Input Mahasiswa</h2> <form action="" method="post"> <table> <tr> <td>No</td> <td>NIM</td> <td>Nama</td> <td>Alamat</td> </tr> <?php for($i=1;$i<=$banyak_data;$i++): ?> <tr> <td><?php echo $i ?></td> <td><input name="data[<?php echo $i ?>][nim]" /></td> <td><input name="data[<?php echo $i ?>][nama]" /></td> <td><input name="data[<?php echo $i ?>][alamat]" /></td> </tr> <?php endfor ?> </table> <input type="submit" value="simpan" /> </form> /system/application/views/list_mahasiswa.php <h2>Daftar Mahasiswa</h2> <table> <tr>

<th>No</th> <th>NIM</th> <th>Nama</th> <th>Alamat</th> </tr> <?php $i = 0 ?> <?php foreach($mahasiswa as $m): ?> <tr> <td><?php echo $i++ ?></td> <td><?php echo $m->nim ?></td> <td><?php echo $m->nama ?></td> <td><?php echo $m->alamat ?></td> </tr> <?php endforeach ?> </table> <?php echo anchor('data_mahasiswa/add_multiple','Tambah Data') ?>

Untuk contoh file nya klik link Download yang ada di bawah ini.. Page Template adalah sebuah pola layout pada sebuah halaman web di mana kita akan selalu memakai pola tersebut sesuai kebutuhan kita untuk meload halaman lengkap beserta header, content, dan footernya.. dengan menggunakan page template, kita tidak harus meload header dan footer di setiap fungsi pada controller di CodeIgniter. Contoh misalnya ada kasus seperti ini: Pada sebuah halaman web, ketika diload harus selalu load header, sidebar, content, footer, dsb.. maka secara normal di program akan berbentuk seperti ini:
<?php class Home extends Controller { function index() { $data['title'] = 'Webku';

$this->load->view('header'); $this->load->view('topmenu'); $this->load->view('home_view', $data); $this->load->view('footer'); } ?> }

Di dalam function index, kode tersebut akan meload view header.php, sidebar.php, home_view.php, dan footer.php. Cara ini sebenarnya kurang efektif, walaupun yang dihasilkan adalah sama, yaitu nge-load lengkap sebuah halaman web (dari tag [html] sampai [/html]). Kenapa kurang efektif? karena di setiap function kita harus meload lagi semua elemen di atas Ini baru satu function, bagaimana jika di dalam satu controller terdapat 50 function? tentu hal ini dapat merepotkan, dan sangat tidak efektif karena membuat redudansi kode.

Menggunakan Page Template Helper


Untuk mempermudah penggunaan code, kita akan membuat sebuah helper baru yang akan kita namakan Page Template Helper (page_template_helper.php) yang akan kita gunakan untuk merender layout yang sudah kita buat. Jadi layaknya seperti gabungan dari function $this->layout() dan $this->render() di Framework CakePHP. OK, pertama-tama buatlah layout untuk template kita, dan simpan di folder /system/application/view/layout/ (seperti biasa, base_url() website kita adalah webku) dengan nama default.php, kodenya adalah sebagai berikut:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Webku<?php echo isset ($title)?" | ".$title:'' ?></title> </head> <body> <div id="header"> <?php $this->load->view('layout/element/header') ?> </div> <div id="topmenu"> <?php $this->load->view('layout/element/topmenu') ?> </div> <div id="content"> <?php $this->load->view($view) ?> </div> <div id="footer"> <?php $this->load->view('layout/element/footer') ?> </div> </body> </html>

Kode di atas adalah sebuah template default website kita, yang berarti setiap action/function yang akan kita panggil akan selalu meload tag html di atas, mulai dari title, kemudian load CSS atau JS misalnya, terus header-nya, topmenu, footer, dan sebagainya. Kita cukup menambahkan elemen di file tersebut.
Contoh ini belum menggunakan CSS, pembahasan tentang CSS akan dijelaskan pada tutorial selanjutnya

Setelah membuat file default.php, buatlah semua file layout element (header, topmenu, dan footer) dan simpan di direktori /system/application/view/layout/element/. Berikut adalah isi dari masing-masing elemen:

Isi dari file-file di bawah ini hanya pemisalan/contoh

../view/layout/element/header.php
<img src="images/banner.jpg" /> Ini adalah HEADER

../view/layout/element/topmenu.php
<a href="#">MENU 1</a> | <a href="#">MENU 2</a> | <a href="#">MENU 3</a>

../view/layout/element/footer.php
Copyright &copy 2010 by Cheyuz

Jadi ketika file default.php dirender, maka element/header.php, element/topmenu.php, dan element/footer.php akan selalu diload. Nah, untuk pemanggil template tersebut dan yang akan digunakan di controller adalah Page Template Helper jadi rencananya kode kita yang sebelumnya:
<?php class Home extends Controller { function index() { $data['title'] = 'Webku'; $this->load->view('header'); $this->load->view('topmenu'); $this->load->view('home_view', $data); $this->load->view('footer'); } } ?>

menjadi seperti ini:


<?php class Home extends Controller { function index() { $data['title'] = 'Webku'; show('home_view',$data); } } ?>

Singkatnya, kita tidak menggunakan function $this->load->view() lagi di Controller, tetapi kita menggunakan function show() yang berfungsi sama dan meload seluruh elemen yang kita tentukan. Sekarang, kita buat sebuah helper page_template_helper.php di /system/application/helper/ dengan kode seperti berikut:
<?php if ( ! function_exists('element')) { function show($view, $data=array(), $template='default') { $ci = &get_instance(); $data['view'] = $view; $data = $ci->load->view('layout/'.$template, $data); } } /* End of file page_template_helper.php */ /* Location: ./system/helpers/page_template_helper.php */

OK, akan Cheyuz jelaskan.. Di kode itu terlihat bahwa $view yang ada di parameter 1 di function show() ini akan

dimasukkan ke dalam variable array $data, yang kemudian akan diload view yang bernama $template (diubah sesuai nama layout, defaultnya adalah default.php) dengan $data tetap dari parameter ke-2.. dan parameter ke-3 ($default) adalah nama file template yang kita buat secara default file template yang akan diload adalah ../layout/default.php. Nah, di controller Home tadi, kita dapat mengubahnya menjadi seperti ini:
<?php class Home extends Controller { function index() { $data['title'] = 'Webku'; show('home_view',$data); } function about(){ $data['title'] = 'About'; show('home_view',$data); } function other(){ $data['title'] = 'Other (layout tanpa topmenu)'; show('home_view',$data, 'other'); } } ?>

Ada function other(), yang akan memanggil halaman dengan template yang berbeda, yaitu menghilangkan topmenu.. karena kita sudah membuat helpernya, maka untuk membuat template baru untuk function other() tersebut, kita tinggal membuat file template bernama other.php di /system/application/view/layout/ dengan isi file seperti berikut:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Webku<?php echo isset ($title)?" | ".$title:'' ?></title> </head> <body> <div id="header"> <?php $this->load->view('layout/header') ?> </div> <?php // menghilangkan topmenu untuk action tertentu ?> <div id="content"> <?php $this->load->view($view) ?> </div> <div id="footer"> <?php $this->load->view('layout/footer') ?> </div> </body> </html>

Setelah semua langkah selesai, selanjutnya adalah meload helper tersebut. Karena kita akan selalu meload helper ini, maka kita atur konfigurasi autoloadnya di file
/system/application/config/autoload.php

Tambahkan page_template pada bagian kode berikut:


.. $autoload['helper'] = array('page_template'); ..

Instalasi

OK, kita mulai aja kita di sini memakai XAMPP pertama-tama, extract file codeigniter.rar ke C:\xampp\htdocs, file bisa didownload di sini. Misalnya kita namakan nama folder root (nama situs) kita adalah webku.

Konfigurasi
Kemudian, hal yang pertama harus dilakukan adalah konfigurasi awal, yaitu base_url, base_url adalah nama root situs kita caranya edit file /webku/system/application/config/config.php, ubah $config['base_url'] = http://example.com/ menjadi:
$config['base_url'] = "http://localhost/webku/";

kemudian hilangkan index.php di $config['index_page'] sehingga menjadi:


$config['index_page'] = "";

Langkah kedua adalah konfigurasi routes, yaitu controller default apakah yang ingin diload? jadi di sini adalah konfigurasi untuk controller home, sehingga ketika kita mengetikkan url http://localhost/webku maka yang dipanggil adalah controller yang sudah dikonfigurasi di routes ini.. Cara konfigurasinya yaitu dengan mengedit file /webku/system/application/config/routes.php, dan di bagian $route['default_controller'] isi dengan home sehingga seperti ini:
$route['default_controller'] = "home";

kita akan membuat supaya ketika kita menuju url http://localhost/webku maka controller yang akan dijalankan adalah controller home . Kemudian setelah itu adalah konfigurasi Databasenya ada di file /webku/system/application/config/database.php, Di situ terlihat konfigurasi-konfigurasi seperti host, username, password, nama db, dsb.. silakan diisi seperti berikut:
$db['default']['hostname'] $db['default']['username'] $db['default']['password'] $db['default']['database'] $db['default']['dbdriver'] $db['default']['dbprefix'] $db['default']['pconnect'] $db['default']['db_debug'] $db['default']['cache_on'] $db['default']['cachedir'] $db['default']['char_set'] $db['default']['dbcollat'] = = = = = = = = = = = = "localhost"; "root"; ""; "blog"; //nama database "mysql"; ""; TRUE; TRUE; FALSE; ""; "utf8"; "utf8_general_ci";

Kemudian konfigurasi selanjutnya adalah konfigurasi untuk autoload, jadi ketika situs dibuka, library/helper/model/dsb apakah yang akan selalu diload.. file ada di /webku/system/application/config/autoload.php, tambahkan database di bagian $autoload['libraries'] menjadi seperti ini:
$autoload['libraries'] = array('database');

Kemudian yang terakhir adalah penambahan .htaccess supaya kita tidak perlu mengetikkan index.php di URL kita, cara untuk menghilangkan index.php (menggunakan .htaccess) ada di sini.

Contoh Aplikasi Database Sederhana


Buatlah sebuah database bernama blog, kemudian copy SQL berikut:
CREATE TABLE IF NOT EXISTS `buku_tamu` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `nama` VARCHAR(100) NOT NULL, `email` VARCHAR(20) NOT NULL,

`situs` VARCHAR(100) NOT NULL, `komentar` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; INSERT INTO `buku_tamu` (`id`, `nama`, `email`, `situs`, `komentar`) VALUES (1, 'Cecep Yusuf', 'cheyuz@yahoo.co.id', 'http://www.cheyuz.com', 'Ini adalah komentar pertama'), (2, 'Deddy Mizwar', 'deddy@mizwar.com', 'http://www.facebook.com', 'Ini adalah komentar kedua');

Kita buat sebuah contoh di mana kita akan menampilkan isi dari database di atas.. Pertama-tama, buatlah model terlebih dahulu di /webku/system/application/model/ dengan nama file buku_tamu.php yang berisi code sebagai berikut:
<?php class Buku_tamu extends Model{ function selectAll() { return $this->db->get('buku_tamu')->result(); } } ?>

Di dalam folder /webku/system/application/controller/ bikin sebuah file bernama home.php untuk membuat class controller yang bernama Home isi dari home.php adalah:
<?php class Home extends Controller{ function __construct() { parent::Controller(); $this->load->model('buku_tamu'); } function index() { $data['title'] = 'Ini adalah aplikasi sederhana'; //memanggil function selectAll di model buku_tamu, dimasukkan ke $data['buku_tamu'] $data['buku_tamu'] = $this->buku_tamu->selectAll(); //meload view bernama home_view.php dengan data variable adalah $data $this->load->view('home_view', $data); } } ?>;

Nah, kemudian kita buat file home_view.php di folder /webku/system/application/view/ dengan isi sebagai berikut:
<h2><?php echo $title ?></h2> <table border="1" cellpadding="5" cellspacing="0"> <tr> <td>No</td> <td>Nama</td> <td>Email</td> <td>Situs</td> <td>Komentar</td> </tr> <?php $i = 0 ?>

<?php foreach ($buku_tamu as $bt): ?> <tr> <td><?php echo $i++ ?></td> <td><?php echo $bt->nama ?></td> <td><?php echo $bt->email ?></td> <td><?php echo $bt->situs ?></td> <td><?php echo $bt->komentar ?></td> </tr> <?php endforeach ?> </table>

Silakan dibuka di browser url berikut: http://localhost/webku Hasilnya adalah sebagai berikut:

Ini adalah aplikasi sederhana


N o 1 Nama Cecep Yusuf Deddy Mizwar Email Situs Komentar Ini adalah komentar pertama Ini adalah komentar kedua

cheyuz@yahoo.c http://www.cheyuz. o.id com deddy@mizwar. com http://www.cheyuz. com

untuk membuat aplikasi yang kompleks, sebenarnya kita hanya mengelola dan mengolah database, meliputi membuat database (Create), membaca (Read), mengubah (Update), menghapus (Delete), ato disingkat menjadi CRUD. Adapun di sini kita akan belajar membuat model untuk data yang akan diolah, view untuk membuat interface, dan controller untuk mengolah model dan ngeload view.. OK, pertama-tama, kita buat sebuah database bernama tutorial_ci, dan buatlah sebuah table bernama mahasiswa (kenapa selalu mahasiswa? ga punya contoh lain nim, nama, alamat.. OK segitu saja.. kamu tinggal copy SQL berikut:
CREATE TABLE IF NOT EXISTS `mahasiswa` ( `id` INT(5) NOT NULL AUTO_INCREMENT, `nim` VARCHAR(20) NOT NULL, `nama` VARCHAR(100) NOT NULL, `alamat` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

), isinya ada id,

Jadi kita membuat tabel kosong bernama mahasiswa dengan field seperti di atas
Diharapkan kamu yang mengikuti tutorial ini udah pernah mengikuti tutorial sebelumnya.. kenapa? karena konfigurasinya kita menggunakan konfigurasi di tutorial dasar part I, bisa klik di sini Seperti pada tutorial dasar part I, webroot kita ini diasumsikan bernama webku, dan konfigurasinya diasumsikan sama, oleh karena itu silahkan baca tutorial dasar part I terlebih dahulu.

1. Menampilkan semua data


OK, langkah pertama adalah membuat sebuah model. Buatlah sebuah file mahasiswa_model.php di /system/application/models dengan isi adalah barisan kode seperti berikut:
<?php /** * @author Cecep Yusuf */ class Mahasiswa_model extends Model { } ?>

Sejauh ini, kita sudah membuat sebuah model untuk mahasiswa, yang nantinya mempunyai banyak fungsi untuk mengolah table mahasiswa Di bawah ini, kita akan menambahkan function selectAll(), yang mana berfungsi untuk menyeleksi semua field di table mahasiswa (select * from mahasiswa), jadi code tadi setelah ditambahkan menjadi seperti berikut:
<?php /** * @author Cecep Yusuf */ class Mahasiswa_model extends Model { function selectAll(){ return $this->db->get('mahasiswa')->result(); } } ?>

Nah, sejauh ini kita sudah bikin function selectAll() yang berfungsi untuk memilih semua field dari table mahasiswa. Setelah itu, model akan diolah oleh controller, jadi sekarang kita buat sebuah controller yang berfungsi untuk memanipulasi objek mahasiswa_model OK, buatlah sebuah controller bernama data_mahasiswa.php di /system/application/controllers dengan isi file sebagai berikut:
<?php /** * @author Cecep Yusuf */ class Data_mahasiswa extends Controller { function __construct() { parent::Controller(); } } ?>

function __construct() adalah sebagai konstruktor berbagai perintah yang ada di dalam fungsi ini akan selalu dipanggil di saat objek Data_mahasiswa dibuat jadi berbagai fungsi untuk meload library, model, helper, dan sebagainya, kita tinggal masukkan di function ini supaya tidak diketik ulang di setiap fungsi.

Karena kita akan meload model mahasiswa_model setiap kali dibuat controller, maka kita load modelnya di bagian __construct() di dalam controller Data_mahasiswa. Jadi kode lengkapnya seperti berikut:
<?php /** * @author Cecep Yusuf */ class Data_mahasiswa extends Controller { function __construct() { parent::Controller(); $this->load->model('mahasiswa_model'); } } ?>

Kemudian, kita buat function index() sebagai penampil semua data yang ada di table mahasiswa, jadi URLnya akan berbentuk http://localhost/webku/data_mahasiswa/index ATAU http://localhost/webku/data_mahasiswa (Index tidak perlu dituliskan)
<?php /** * @author Cecep Yusuf */ class Data_mahasiswa extends Controller { function __construct() { parent::Controller(); $this->load->model('mahasiswa_model'); } function index(){ $data['mahasiswa'] = $this->mahasiswa_model->selectAll(); $this->load->view('data_mahasiswa_view', $data); } } ?>

Di dalam function index() di atas, kita lihat ada script seperti ini:
$data['mahasiswa'] = $this->mahasiswa_model->selectAll(); kode tersebut berarti data hasil keluaran dari function selectAll() di model mahasiswa_model berupa array dan disimpan di dalam array $data['mahasiswa'],

yang

nantinya data tersebut bisa diakses di view.. Kemudian kita lihat lagi, ada script berikut:
$this->load->view('data_mahasiswa_view'); function view() dalam objek load adalah untuk meload view yang sudah kita buat di /system/application/views, dengan mengeset variable hasil ekstrak dari variable $data,

sehingga nanti bisa diakses dari view.. OK, kita buat view-nya dengan nama file data_mahasiswa_view.php di /system/application/views dengan isi sebagai berikut ini:
<h1>Data Mahasiswa</h1> <table> <thead> <tr> <th>No</th> <th>NIM</th> <th>Nama</th> <th>Alamat</th>

<th>Aksi</th> </tr> </thead> <tbody> <?php $i = 1 ?> <?php foreach($mahasiswa as $m): ?> <tr> <td><?php echo $i++ ?></td> <td><?php echo $m->nim ?></td> <td><?php echo $m->nama ?></td> <td><?php echo $m->alamat ?></td> <td></td> </tr> <?php endforeach ?> </tbody> </table>

Sekarang, coba buka alamat di browser: http://localhost/webku/data_mahasiswa, keluar apa? table kan? dengan data KOSONG. OK, sekarang kita lanjut ke sesi yg kedua.. yaitu MENAMBAHKAN DATA

2. Menambahkan data
Kita akan membuat tampilan seperti berikut:

Data Mahasiswa
N o 1 2 NIM Nama Alamat Cipanas, Cianjur Jakarta Aksi edit | delete | detail edit | delete | detail

07003 Cecep 35 Yusuf 08001 Fitri 13 Yuniar

Tambah data Silakan buat sebuah anchor() (a) di bawah table di dalam file data_mahasiswa_view.php.. Jangan lupa sebelumnya load dulu url_helper di controller dengan cara menambahkan code berikut:
<?php ... $this->load->helper('url'); ... ?>

anchor() adalah function helper yang udah tersedia di CI, untuk menggantikan tag a

Buatlah sebuah anchor sebagai link ke function add() di Controller (fungsi ini belum dibuat), caranya dengan menambahkan script berikut:
<?php echo anchor('data_mahasiswa/add', 'Tambah Data') ?>

jadi kode lengkapnya di data_mahasiswa_view.php adalah sebagai berikut:


<h1>Data Mahasiswa</h1> <table> <thead>

<th>No</th> <th>NIM</th> <th>Nama</th> <th>Alamat</th> <th>Aksi</th> </tr> </thead> <tbody> <?php $i = 1 ?> <?php foreach($mahasiswa as $m): ?> <tr> <td><?php echo $i++ ?></td> <td><?php echo $m->nim ?></td> <td><?php echo $m->nama ?></td> <td><?php echo $m->alamat ?></td> <td></td> </tr> <?php endforeach ?> </tbody> </table> <?php echo anchor('data_mahasiswa/add', 'Tambah Data') ?>

<tr>

Langkah selanjutnya adalah membuat function add() di controller data_mahasiswa.php, tambahkan function ini:
... function add(){ $this->load->view('add_view'); }

...

Di sana terdapat code untuk meload file view yang bernama add_view.php Silakan buat view add_view.php di folder /system/application/views dengan isi sebagai berikut:
<h1>Tambah data</h1> <form action="" method="post"> <table> <tr> <th>NIM</th> <td><input name="nim" /></td> </tr> <tr> <th>Nama</th> <td><input name="nama" /></td> </tr> <tr> <th>Alamat</th> <td><textarea name="alamat"></textarea></td> </tr> <tr> <th></th> <td><input type="submit" value="tambah" /></td> </tr> </table> </form>

Perlu diketahui bahwa cara di atas belum menggunakan library form bawaan dari CI.. kita memakai cara manual dulu, sebelum nanti kita bahas penggunaan helper di CI di tutorial selanjutnya

Method yang digunakan yaitu POST, yang akan menghasilkan sebuah variable array $_POST Sebelumnya, kita tambahkan function insert() di model mahasiswa_model.php seperti berikut:
... function insert($set){ $this->db->insert('mahasiswa', $set); }

...

function insert tersebut sudah ada di library database CI, jadi kita tidak usah membuat query insert into. lagi sekarang, di Controller data_mahasiswa.php kita ubah function add() menjadi seperti berikut:
... function add() { if($_POST==NULL) { $this->load->view('add_view'); }else { $this->mahasiswa_model->insert($_POST); redirect('data_mahasiswa/index'); } } ...

Kita jelasin, di sana ada fungsi If untuk mengecek apakah data dari $_POST sudah terSET atau belum kalo kita udah mengklik submit, berarti kita sudah mengeset variable $_POST jika belum (=NULL), maka program hanya meload view saja. di sana ada function redirect(), yaitu function bawaan CI, yang berfungsi untuk meredirect halaman (mengalihkan), sehingga ketika kita menambahkan data, maka akan dialihkan lagi ke index Sejauh ini, kamu berhasil membuat aplikasi CI untuk menambahkan data ke database dan menampilkannya. sekarang mari kita buat fungsi/aksi lainnya, yaitu update dan delete Kita review hasil kerjaan dari tutorial kemarin
<h1>Data Mahasiswa</h1> <table> <thead> <tr> <th>No</th> <th>NIM</th> <th>Nama</th> <th>Alamat</th> <th>Aksi</th> </tr> </thead> <tbody> <?php $i = 1 ?> <?php foreach($mahasiswa as $m): ?> <tr> <td><?php echo $i++ ?></td> <td><?php echo $m->nim ?></td> <td><?php echo $m->nama ?></td> <td><?php echo $m->alamat ?></td> <td></td>

</tr> <?php endforeach ?> </tbody> </table>

Sebelumnya kita tambahkan 2 buah anchor (link) untuk membuat hyperlink menuju ke masing2 fungsi tersebut,.. yaitu anchor untuk edit dan delete.. (catatan: edit = update). Buatlah dua buah anchor dengan bentuk kode seperti ini di kolom paling kanan tabel:
<?php echo anchor('data_mahasiswa/edit/'.$m->id, 'Ubah') . ' | ' . anchor('data_mahasiswa/delete/'.$m->id, 'Hapus'); ?>

jadi bentuknya seperti ini:


<h1>Data Mahasiswa</h1> <table> <thead> <tr> <th>No</th> <th>NIM</th> <th>Nama</th> <th>Alamat</th> <th>Aksi</th> </tr> </thead> <tbody> <?php $i = 1 ?> <?php foreach($mahasiswa as $m): ?> <tr> <td><?php echo $i++ ?></td> <td><?php echo $m->nim ?></td> <td><?php echo $m->nama ?></td> <td><?php echo $m->alamat ?></td> <td><?php echo anchor('data_mahasiswa/edit/'.$m->id, 'Ubah') . ' | ' . anchor('data_mahasiswa/delete/'.$m->id, 'Hapus'); ?></td> </tr> <?php endforeach ?> </tbody> </table>

previewnya:

Data Mahasiswa
N o 1 2 NIM Nama Alamat Cipanas, Cianjur Jakarta Aksi edit | delete edit | delete

07003 Cecep 35 Yusuf 08001 Fitri 13 Yuniar

Tambah data

1. Menghapus Data
Kemudian setelah itu, kita buat sebuah function di dalam model mahasiswa_model.php di folder /system/application/models:

<?php ... function delete($id){ $this->db->delete('mahasiswa', array('id'=>$id)); } ... ?>

Kemudian, di controller data_mahasiswa.php di /system/application/controllers tambahkan function berikut:


... function delete($id){ $this->mahasiswa_model->delete($id); redirect('data_mahasiswa'); } ...

fungsi di atas memanggil fungsi dari objek Mahasiswa_model yaitu delete, yang akan menghapus data dari table mahasiswa yang id nya adalah parameter dari function tersebut ($id) Kemudian setelah itu baru diredirect/dialihkan ke tampilan index dari controller data_mahasiswa.

2. Mengubah Data
Nah, untuk mengubah data.. kita harus tahu fungsi untuk mengubah database dari Active Record yang disediakan oleh CI.. yaitu $this->db->update($nama_table, $data) Sekarang, kita tambahkan function update() dan select($id) untuk menyeleksi SATU data yang akan dipilih berdasarkan id-nya dibuat di model mahasiswa.php di /system/application/models,,,
... function update($id){ $this->db->where('id',$id)->update('mahasiswa', $_POST); } function select($id){ return $this->db->get_where('mahasiswa', array('id'=>$id))->row(); } ...

Di situ ada fungsi update(), yang equivalen dengan query update from mahasiswa where id=$id set $_POST. Dan fungsi select yang nantinya akan kita gunakan ketika nilai dari data akan dimasukkan ke dalam sebuah form (untuk diedit) sehingga kita menggunakan row() yang berfungsi meretrieve data menjadi objek, tetapi hanya SATU BARIS DATA... (segitunya sampe dipertebel hehe ) Setelah kita membuat modelnya kemudian kita tambahkan function edit() di Controller data_mahasiswa.php di /system/application/controller/:
... function edit($id){ $data['m'] = $this->mahasiswa_model->select($id); $this->load->view('edit_view',$data); }

...

Di situ kita buat sebuah fungsi edit di controller data_mahasiswa.php dengan parameter $id.. karena kita akan mengubah data pada setiap data yang ada dengan mengambil id-nya dan dipanggillah fungsi update() dari model mahasiswa Tetapi sebelumnya kita harus

ngambil sebuah data mahasiswa tertentu berdasarkan $id yang ada untuk dimasukkan ke dalam form,, sehingga nantinya bisa diubah makanya kita membuat fungsi select() Ini adalah view yang harus ada di /system/application/views dengan nama file edit_view.php (yang udah kita masukkan ke dalam fungsi $this->load->view() di controller. Ini adalah isi dari view-nya:
<h1>Ubah data</h1> <form action="" method="post"> <table> <tr> <th>NIM</th> <td><input name="nim" value="<?php echo $m->nim ?>" /></td> </tr> <tr> <th>Nama</th> <td><input name="nama" value="<?php echo $m->nama ?>" /></td> </tr> <tr> <th>Alamat</th> <td><textarea name="alamat"><?php echo $m->alamat ? ></textarea></td> </tr> <tr> <th></th> <td><input type="submit" value="ubah" /></td> </tr> </table> </form>

Jadi, ketika view tersebut diload, maka form akan langsung terisi dengan data yang kita panggil dengan $id yang ada di URL (yang merupakan parameter) Kemudian, di controller kita tambahkan code berikut:
... function edit($id) { if($_POST==NULL) { $data['m'] = $this->mahasiswa_model->select($id); $this->load->view('edit_view',$data); }else { $this->mahasiswa_model->update($id); redirect('data_mahasiswa'); } }

...

Kita lihat, ada fungsi if else buat apa tuh?? itu buat ngecek apakah data udah dikirim atau belum (NULL)? Nah, klo udah dikirim berarti bakal diupdate kalo belum maka program akan mengambil data (select) dan dimasukkan ke dalam form Kemudian terdapat fungsi redirect (sama seperti add), ketika data sudah diubah, maka halaman langsung dialihkan ke dalam action yang ada di prameter redirect tersebut. Nah, sejauh ini kita sudah membuat aplikasi CRUD lengkap Create, Read, Update, dan Delete.

Penamaan Class

SALAH:
class superclass

BENAR:
class Super_class class SuperClass

CONTOH:
class Super_class { function __construct() { } } class SuperClass { function __construct() { } }

Penamaan Function
SALAH:
function fileproperties() // tidak deskriptif, membutuhkan underscore function fileProperties() // tidak deskriptif dan menggunakan CamelCase function getfileproperties() // Lebih baik! Tetapi masih menggunakan underscore function getFileProperties() // menggunakan CamelCase function get_the_file_properties_from_the_file() // Terlalu banyak kata (njelimet)

BENAR:
function get_file_properties() // Deskriptif, ada pemisahan dengan underscore, dan huruf kecil semua

Penamaan Variable
SALAH:
$j = 'foo'; // satu huruf lebih baik digunakan untuk variable yang digunakan pada pengulangan $Str // ada huruf yang kapital, ini bukan objek! $bufferedText // menggunakan CamelCasing, dan dapat dipendekkan tanpa menghilangkan maksud semantik $groupid // dua kata tapi tidak memakai underscore, tidak deskriptif $name_of_last_city_used // terlalu njelimet lagi ???

BENAR:
for ($j = 0; $j < 10; $j++) $str $buffer $group_id $last_city

Constants
SALAH:
myConstant N S_C_VER // tidak ada underscore dan tidak full kapital // Jangan ada constant yang menggunakan satu karakter // tidak deskriptif

BENAR:
MY_CONSTANT NEWLINE SUPER_CLASS_VERSION

TRUE, FALSE, dan NULL


Harus menggunakan full karakter kapital (uppercase) SALAH:
if ($foo == true) $bar = false; function foo($bar = null)

BENAR:
if ($foo == TRUE) $bar = FALSE; function foo($bar = NULL)

Operator Logika
SALAH:
if ($foo || $bar) if ($foo AND $bar) // OK tapi tidak direkomendasikan untuk IDE yang mengandung syntax highlighting if (!$foo) if (! is_array($foo))

BENAR:
if if if if ($foo OR $bar) ($foo && $bar) // recommended ( ! $foo) ( ! is_array($foo))

Whitespace
Jangan ada spasi sebelum tag SALAH:
<?php ?> // ...ada whitespace sebelum php dibuat

BENAR:
<?php ?> // ...Tidak ada whitespace sebelum php dibuat

Code Indenting

Tabulasi pada penulisan kode program KURANG BAIK:


function foo($bar) { // ... } foreach ($arr as $key => $val) { // ... } if ($foo == $bar) { // ... } else { // ... } for ($i = 0; $i < 10; $i++) { for ($j = 0; $j < 10; $j++) { // ... } }

BAIK:
function foo($bar) { // ... } foreach ($arr as $key => $val) { // ... } if ($foo == $bar) { // ... } else { // ... } for ($i = 0; $i < 10; $i++) { for ($j = 0; $j < 10; $j++) { // ... } }

Bracket dan Parenthetic Spacing


SALAH:
$arr< $foo > = 'foo'; //ada spasi di dalam bracket

BENAR:
$arr<$foo> = 'foo'; // tidak ada spasi di dalam bracket

SALAH:
function foo ( $bar ) { }

BENAR:
function foo($bar) // tidak ada spasi di dalam parameter { }

SALAH:
foreach( $query->result() as $row )

BENAR:
foreach ($query->result() as $row)

Private dan Public Method


convert_text() _convert_text() // public method // private method

Short Open Tags


SALAH:
<? echo $foo; ?> <?=$foo?>

BENAR:
<?php echo $foo; ?>

Satu Statemen pada Satu Baris


SALAH:
$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);

BENAR:
$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);

Strings
SALAH:
"My String" diparsing, lebih baik satu tanda kutip "My string $foo" 'SELECT foo FROM bar WHERE baz = \'bag\'' // tidak ada variable yang // membutuhkan kurung kurawal // jelek

CORRECT:
'My String' "My string {$foo}" "SELECT foo FROM bar WHERE baz = 'bag'"

Query SQL
SALAH:
$query = mysql_query("select foo, bar, baz, foofoo, foobar as raboof, foobaz from exp_pre_email_addresses where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100"); //susah dibaca

BENAR:
$query = mysql_query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz FROM exp_pre_email_addresses WHERE foo != 'oof' AND baz != 'zab' ORDER BY foobaz LIMIT 5, 100"); //lebih mudah dibaca

You might also like