Simple CRUD dengan PHP Framework (CodeIgniter)

Perpustakaan – Data Buku

Bagi Anda yang gemar dengan pemrograman web menggunakan bahasa PHP, maka sudah dapat dipastikan bahwa Anda mengenal teknik pemrograman web yang satu ini, yaitu menulis program PHP menggunakan PHP framework (CodeIgniter).  Dalam tulisan ini saya mencoba menerapkan teknik tersebut untuk melakukan proses CRUD (Create Read Update Delete) sederhana pada data buku dalam aplikasi perpustakaan. Berikut langkah-langkahnya:

  1. Persiapan awal
  2. Konfigurasi CodeIgniter
  3. Membuat Controller
  4. Membuat Model
  5. Membuat View

Persiapan Awal

Dalam tahap ini ada beberapa hal yang perlu disiapkan mulai dari XAMPP (Paket instalasi Apache, MySQL, PHP), persiapan database-tabel dan download-extract CodeIgniter pada folder project.

Konfigurasi CodeIgniter

Setelah persiapan awal selesai, lakukan persiapan berikutnya yaitu konfigurasi CodeIgniter untuk aplikasi perpustakaan yang akan kita buat. Beberapa file konfigurasi yang perlu kita rubah adalah:

  • File ‘autoload.php’,  untuk mengatur packages, libraries, file helper, file custom config, file language dan models untuk diload otomatis secara default.
    Lokasi: htdocs\workshop_ci\application\config\autoload.php

    Konfigurasi untuk library ‘database’

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

    Konfigurasi untuk helper ‘form’, ‘url’

    $autoload['helper'] = array('form','url');
  • File ‘config.php’, untuk mengatur beberapa konfigurasi utama dalam aplikasi yang kita buat.
    Lokasi: htdocs\workshop_ci\application\config\config.php

    Konfigurasi ‘Base Site URL’ à url web yang kita gunakan

    $config['base_url'] = 'http://localhost/workshop_ci/';
  • File ‘database.php’ , untuk mengatur konfigurasi MySQL Server dan database yang akan kita gunakan.
    Lokasi: htdocs\workshop_ci\application\config\database.php

    Konfigurasi server MySQL & database

    $db['default']['hostname'] = 'localhost';
    $db['default']['username'] = 'root';
    $db['default']['password'] = '';
    $db['default']['database'] = 'ci';
    $db['default']['dbdriver'] = 'mysql';
    
  • File ‘routes.php’, untuk mengatur routing dari CodeIgniter.
    Lokasi: htdocs\workshop_ci\application\config\routes.php

    Konfigurasi default_controller: ‘perpustakaan ‘ agar dipanggil ketika ‘Base Site URL’ diload

    $route['default_controller'] = "perpustakaan";



Info tentang routing: Application Flow Chart (CodeIgniter User Guide)

Gambar berikut menjelaskan bagaimana alur data dari sistem pada CodeIgniter:

  1. File index.php berlaku sebagai controller terdepan, yang akan meng-inisialisasi sumber daya dasar yang diperlukan untuk menjalankan CodeIgniter.
  2. Bagian Router akan memeriksa HTTP request untuk kemudian menentukan apa yang seharusnya dilakukan terhadap permintaan tersebut.
  3. Jika file cache ada, maka akan dikirim langsung ke browser, tanpa melewati tahapan eksekusi normal sistem.
  4. Security. Sebelum controller aplikasi diload, HTTP request dan sembarang data user yang dikirim akan difilter untuk keamanan.
  5. Bagian Controller akan meload model, core libraries, helpers, dan sumber daya lain yang dibutuhkan untuk permintaan yang spesifik.
  6. View final akan dirender kemudian dikirim ke web browser untuk dapat dilihat. Jika proses chacing berjalan, view akan di chache terlebih dahulu sehingga pada permintaan beikutnya akan cepat dilayani.

Membuat Controller

Dalam konsep pemrograman MVC, karakter ‘C’ itu merupakan ‘Controller’ yang menjembatani antara model dan view. Controller berisi perintah-perintah yang berfungsi untuk memproses suatu data (dengan me-load model) dan mengirimkan hasilnya ke halaman web (dengan me-load view). Dalam aplikasi perpustakaan ini kita membuat satu file controller yaitu perpustakaan.php sebagai controller utama. Berikut langkahnya:

  • Buat file controller dengan nama file ‘perpustakaan.php.
    Lokasi: htdocs\workshop_ci\application\controllers\perpustakaan.php

    <?php
    class Perpustakaan extends CI_Controller
    {
    	function __construct()
    	{
        	parent::__construct();
    	}
    	function index()
        {
    		$this->load->view('perpustakaan');
        }
    	function tampil_buku()
        {
        	$kode='all';
    	$this->load->model('buku');
        	$data_buku['databuku']=$this->buku->tampil_data_buku($kode);  
        	$this->load->view('tampilbuku',$data_buku);
        }
    	function tambah_buku()
    	{
    		$this->load->view('tambahbuku');
    	}
    	function simpan_buku()
    	{
    		if (isset($_POST['mysubmit'])){
    		$data = array(
    		'kode_buku'	=> $this->input->post('kode_buku'),
                    'judul_buku'    => $this->input->post('judul_buku'),                                        
                    'penerbit'   	=> $this->input->post('penerbit'),
    		'isbn'	        => $this->input->post('isbn'),    
                    'stok_buku'	=> $this->input->post('stok_buku'),
    		'mode'		=> $this->input->post('mode')
    		);
    			$this->load->model('buku');
    			$hasil=$this->buku->simpan_data_buku($data);
    			if ($hasil){
    				echo "Simpan data berhasil";
    			}else{
    				echo "Simpan data gagal";
    			}
    			echo "<br/>";
    			echo anchor('perpustakaan', 'Kembali');
    		}
    	}
    	function koreksi_buku($kd)
    	{
    		$this->load->model('buku');
        	        $data_buku['databuku']=$this->buku->tampil_data_buku($kd);  
    		$this->load->view('koreksibuku',$data_buku);
    	}
    	function konfirm_hapus_buku($kd)
    	{
    		$this->load->model('buku');
             	$data_buku['databuku']=$this->buku->tampil_data_buku($kd);  
    		$this->load->view('konfirmhapus',$data_buku);
    	}
    	function hapus_buku($kd)
    	{
    		$this->load->model('buku');
            	$hasil=$this->buku->hapus_data_buku($kd);
    		if ($hasil){
    				echo "Hapus data berhasil";	
    		}else{
    				echo "Hapus data gagal";
    		}
    		echo "<br/>";
    		echo anchor('perpustakaan', 'Kembali');
    	}
    }
    ?>
    

    Penjelasan:

    • function __construct(), controller untuk memanggil constructor pada class parent. Fungsi constructor untuk melakukan set nilai default atau menjalankan proses default ketika class di load.
    • function index(), controller untuk memanggil halaman utama. Fungsi ini akan me-load view ‘perpustakaan.php’ dengan sintak: $this->load->view(‘perpustakaan’)(lihat pada bagian bagan alur).
    • function tampil_buku(), controller untuk melayani proses tampil buku. Fungsi ini akan me-load view model ‘buku’ dengan sintak: $this->load->model(‘buku’) kemudian memanggil fungsi tampil_data_buku($kode) yang terdapat pada model ‘buku’ lalu mengirimkan hasilnya ke view dengan me-load view ‘tampilbuku.php’ dan ditampilkan ke browser dengan sintak: $this->load->view(‘tampilbuku’,$data_buku).
    • function tambah_buku(), controller untuk melayani proses tambah buku. Fungsi ini akan memanggil view ‘tambahbuku.php’.
    • function simpan_buku(), controller untuk melayani proses simpan buku. Fungsi ini akan menangkap data yang dikirim user melalui form, baik tambah buku atau koreksi buku melalui variabel POST kemudian memanggil model ‘buku.php’ dan menjalankan fungsi simpan_data_buku($data) dengan nilai return status simpan buku berhasil atau tidak.
    • function koreksi_buku($kd) , controller untuk melayani proses koreksi buku. Fungsi ini akan me-load view model ‘buku’ dan menjalankan fungsi tampil_data_buku($kode) lalu mengirimkan hasilnya ke view dengan me-load view ‘koreksibuku.php’ dan ditampilkan ke browser.
    • function konfirm_hapus_buku($kd) , controller untuk melayani proses konfirm hapus buku. Fungsi ini akan me-load view model ‘buku’ dan menjalankan fungsi tampil_data_buku($kode) lalu mengirimkan hasilnya ke view dengan me-load view ‘konfirmhapus.php’ dan ditampilkan ke browser.
    • function hapus_buku($kd) , controller untuk melayani proses hapus buku. Fungsi ini akan memanggil model ‘buku.php’ dan menjalankan fungsi hapus_data_buku($data) dengan nilai return status simpan buku berhasil atau tidak.

Membuat Model

Model mewakili struktur data. Model berisi fungsi-fungsi untuk pengelolaan basis data seperti ambil tambah, koreksi dan hapus data. Karena tulisan ini membahas tentang data buku, maka fungsi-fungsi untuk memanipulasi tabel buku kita buat pada model ‘buku.php’. Berikut langkahnya:

  • Buat file model dengan nama file ‘buku.php’
    Lokasi: htdocs\workshop_ci\application\models\buku.php

    <?php
    class Buku extends CI_Model
    {
        public function tampil_data_buku($kode)
        {
    		if ($kode=='all'){
    			$hasil=$this->db->get('tabel_buku');	
    		}else{
    			$this->db->where('kode_buku',$kode);
    			$hasil=$this->db->get('tabel_buku');
    		}
            return $hasil->result();
        }
    	public function simpan_data_buku($data)
    	{
    		if ($data['mode']=='baru'){
    			unset($data['mode']);
    			$hasil=$this->db->insert('tabel_buku', $data); 	
    		}else{
    			unset($data['mode']);
    			$this->db->where('kode_buku',$data['kode_buku']);
    			$hasil=$this->db->update('tabel_buku', $data); 	
    		}
    		return $hasil;
    	}
    	public function hapus_data_buku($kode)
    	{
    		$this->db->where('kode_buku', $kode);
    		$hasil=$this->db->delete('tabel_buku'); 
    		return $hasil;
    	}
    }
    ?> 
    

    Penjelasan:

    • public function tampil_data_buku($kode), model untuk proses tampil data. Fungsi ini akan memanggil $this->db->get(‘tabel_buku’) yang terdapat dalam Database class sama seperti perintah query “Select * from tabel_buku”. Dan apabila menampilkan data dengan kriteria kode buku tertentu, maka fungsi database class yang digunakan adalah $this->db->where(‘kode_buku’,$kode) lalu $this->db->get(‘tabel_buku’). Perintah tersebut akan sama dengan perintah query “Select * from tabel_buku where kode_buku=$kode”.
    • public function simpan_data_buku($data), model untuk proses simpan data baik data baru ataupun data hasil koreksi. Sintak untuk simpan data baru adalah $this->db->insert(‘tabel_buku’, $data). Sintak tersebut sama dengan perintah query “insert into tabel_buku values()”. Sedang sintak  untuk simpan data hasil koreksi adalah $this->db->where(‘kode_buku’,$data['kode_buku']) dan $hasil=$this->db->update(‘tabel_buku’, $data). Sintak tersebut sama dengan perintah query “Update tabel_buku set field=value where kode_buku=$data[‘kode_buku’].
    • public function hapus_data_buku($kode), model untuk proses hapus buku. Fungsi ini melakukan hapus data menggunakan sintak $this->db->where(‘kode_buku’, $kode) dan $hasil=$this->db->delete(‘tabel_buku’). Sintak tersebut adalah sama dengan perintah query “Delete from tabel_buku where kode_buku=$kode”.

Membuat View

View adalah bagian yang mengatur tampilan untuk dilihat oleh pengguna melalui web browser, umumnya view ini adalah file HTML biasa. Untuk menangani beberapa transaksi dalam aplikasi perpustakaan- data buku ini, terdapat beberapa file view yang harus kita siapkan, yaitu:

  • File view ‘perpustakaan.php’, sebagai halaman awal aplikasi perpustakaan.
    Lokasi: htdocs\workshop_ci\application\views\perpustakaan.php

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>Perpustakaan Online</title>
    <meta name="" content="">
    </head>
    <body>
    <h1>Perpustakaan</h1>
    <ul>
    <li><?php echo anchor('perpustakaan/tampil_buku', 'Tampil Buku');?></li>
    <li><?php echo anchor('perpustakaan/tambah_buku', 'Tambah Buku');?></li>
    </ul>
    </body>
    </html>
    
  • File view ‘tampilbuku.php’, sebagai halaman untuk menampilkan daftar buku.
    Lokasi: htdocs\workshop_ci\application\views\ tampilbuku.php

    <?php
    echo "<h2>Tampil data buku</h2>";
    echo "<table border=1>";
    echo "<tr><th>kode buku</th> <th>judul buku</th> <th> penerbit </th> <th> isbn </th> <th> stok buku </th><th>&nbsp;</th></tr>";
    foreach ($databuku as $isi)
        {
        echo "<tr>";
                echo "<td>$isi->kode_buku</td>";
                echo "<td>$isi->judul_buku</td>";
                echo "<td>$isi->penerbit</td>";
                echo "<td>$isi->isbn</td>";
                echo "<td>$isi->stok_buku</td>";
    			echo "<td>";
    			echo anchor('perpustakaan/koreksi_buku/'.$isi->kode_buku, 'Edit')." | ";
    			echo anchor('perpustakaan/konfirm_hapus_buku/'.$isi->kode_buku, 'Hapus');
    			echo "</td>";
        echo "</tr>";
        }
    echo "</table>";
    echo "<p>".anchor('perpustakaan', 'Kembali')."</p>";
    ?>
    
  • File view ‘tambahbuku.php’, sebagai halaman form untuk menambah buku.
    Lokasi: htdocs\workshop_ci\application\views\tambahbuku.php

    <?php
    echo "<h2>Tambah data buku</h2>";
    echo form_open('perpustakaan/simpan_buku');
    echo "<table align='left' width='100%'>";
    
    $field1=array('name' => 'kode_buku','size'=>'15');
    echo "<tr><td width='10%'>Kode Buku</td><td width='1%'> :</td><td>".form_input($field1)."</td></tr>";
    
    $field2=array('name' => 'judul_buku','size'=>'30');
    echo "<tr><td>Judul</td><td> :</td><td>".form_input($field2)."</td></tr>";
    
    $field3=array('name' => 'penerbit','size'=>'30');
    echo "<tr><td>Penerbit</td><td> :</td><td>".form_input($field3)."</td></tr>";
    
    $field4=array('name' => 'isbn','size'=>'30');
    echo "<tr><td>ISBN</td><td> :</td><td>".form_input($field4)."</td></tr>";
    
    $field5=array('name' => 'stok_buku','size'=>'11');
    echo "<tr><td>Stock</td><td> :</td><td>".form_input($field5)."</td></tr>";
    
    echo form_hidden('mode', 'baru');
    echo "<tr><td>".form_submit('mysubmit','Simpan')."</tr></td>" ;
    
    echo "</table>";
    echo form_close();
    echo "<p>".anchor('perpustakaan', 'Kembali')."</p>";
    ?>
    
  • File view ‘koreksibuku.php’, sebagai halaman form untuk koreksi buku.
    Lokasi: htdocs\workshop_ci\application\views\ koreksibuku.php

    <?php
    echo "<h2>Koreksi data buku</h2>";
    echo form_open('perpustakaan/simpan_buku');
    echo "<table align='left' width='100%'>";
    $field1=array('name' => 'kode_buku','size'=>'15','value'=>$databuku[0]->kode_buku);
    echo "<tr><td width='10%'>Kode Buku</td><td width='1%'> :</td><td>".form_input($field1)."</td></tr>";
    	
    $field2=array('name' => 'judul_buku','size'=>'30','value'=>$databuku[0]->judul_buku);
    echo "<tr><td>Judul</td><td> :</td><td>".form_input($field2)."</td></tr>";
    	
    $field3=array('name' => 'penerbit','size'=>'30','value'=>$databuku[0]->penerbit);
    echo "<tr><td>Penerbit</td><td> :</td><td>".form_input($field3)."</td></tr>";
    
    $field4=array('name' => 'isbn','size'=>'30','value'=>$databuku[0]->isbn);
    echo "<tr><td>ISBN</td><td> :</td><td>".form_input($field4)."</td></tr>";
    	
    $field5=array('name' => 'stok_buku','size'=>'11','value'=>$databuku[0]->stok_buku);
    echo "<tr><td>Stock</td><td> :</td><td>".form_input($field5)."</td></tr>";
    	
    echo form_hidden('mode', 'koreksi');
    echo "<tr><td>".form_submit('mysubmit','Simpan')."</tr></td>" ;	
    
    echo "</table>";
    echo form_close();
    echo "<p>".anchor('perpustakaan', 'Kembali')."</p>";
    ?>
    
  • File view ‘konfirmhapus.php’, sebagai halaman konfirmasi untuk hapus buku.
    Lokasi: htdocs\workshop_ci\application\views\ konfirmhapus.php

    <?php
    echo "<h2>Konfirmasi hapus data buku</h2>";
    echo "<p>Apakah data buku berikut ini akan dihapus?</p>";
    echo "<table border=1>";
    echo "<tr><th>kode buku</th> <th>judul buku</th> <th> penerbit </th> <th> isbn </th> <th> stok buku </th></tr>";
    foreach ($databuku as $isi)
        {
        echo "<tr>";
                echo "<td>$isi->kode_buku</td>";
                echo "<td>$isi->judul_buku</td>";
                echo "<td>$isi->penerbit</td>";
                echo "<td>$isi->isbn</td>";
                echo "<td>$isi->stok_buku</td>";
        echo "</tr>";
        }
    echo "</table>";
    echo "<p>".anchor('perpustakaan/hapus_buku/'.$isi->kode_buku, 'Ya')." | ";
    echo anchor('perpustakaan', 'Tidak')."</p>";
    ?>
    

Screenshot

Buka aplikasi perpustakaan menggunakan browser dengan alamat: http://localhost/workshop_ci/

  • Halaman utama
  • Halaman tampil buku
  • Halaman tambah buku
  • Halaman koreksi buku
  • Halaman hapus buku

Bagan Alur setiap proses

Bagan alur dibawah ini menjelaskan  alur data dari setiap proses dalam aplikasi perpustakaan.

  • Mengakses halaman utama
  • Melihat daftar buku
  • Menambah data buku
  • Mengkoreksi data buku
  • Menghapus data buku

Download

17 thoughts on “Simple CRUD dengan PHP Framework (CodeIgniter)

  1. Bang Programnya Jalan… Makasih banyk yanh bang semoga ente selalu di kasih kemudahan… Aminn

  2. Bang, mau tanya.. kalo pas di klik delete nya yang di view barang, langsung ada warning yakin akan menghapus… jika ya.. hilang dari sistem jika tidak.. no action..
    bagaimanakah script nya ??

  3. gan, kok di Tampil Data Buku
    A PHP Error was encountered
    Severity: Notice
    Message: Undefined variable: databuku
    Filename: views/tampilbuku.php
    Line Number: 6
    A PHP Error was encountered
    Severity: Warning
    Message: Invalid argument supplied for foreach()
    Filename: views/tampilbuku.php
    Line Number: 6

    itu apanya iya gan??

  4. gan, mode itu dihidden untuk pemeriksaan ada data atau tidak ko tidak jalan ya?

    bisa tidak cek data yang lain, untuk mengecek data kosong atau tidaknya?

    tq

  5. Fatal error: Call to undefined function anchor() in C:\xampp\htdocs\isan\application\views\perpustakaan.php on line 10
    kalau eror nya gini gimana penyelesaianya…….
    mohon bantuanya,,,,,,,,,,

  6. coba cek file htdocs\workshop_ci\application\config\autoload.php, apakah helper ‘url’ sudah masuk dalam konfigurasi autoload helper:
    $autoload['helper'] = array(‘form’,'url’);

  7. mode diatas digunakan untuk membedakan aksi tambah data baru atau aksi koreksi data yang sudah ada.

  8. Ciamik Gan…

    Ane udah lama nyari tutorial yg lengkap kya gini.

    Btw mau tanya dikit, kalo saya tambahin Css, saya naruhnya di Folder apa Gan?

    Mohon jawabnnya. Trims

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>