Proyek Membangun Website Berbasis PHP
dengan Codeigniter
Awan Pribadi Basuki
CV. LOKOMEDIA
Proyek Membangun Website dengan Codeigniter Perpustakaan Nasional : Katalog Dalam Terbitan (KDT) Penulis : Awan Pribadi Basuki Proyek Membangun Website Berbasis PHP dengan Codeigniter - Cet. I. - Yogyakarta : Penerbit Lokomedia, 2014 238 halaman; 14 x 21 cm ISBN : 978-602-14306-4-4 Penerbit Lokomedia, Cetakan Pertama : Juli 2014
Editor : Lukmanul Hakim Cover : Subkhan Anshori Layout : Lukmanul Hakim
Diterbitkan pertama kali oleh : CV. LOKOMEDIA Jl. Jambon, Perum. Pesona Alam Hijau 2 Kav. B-4, Kricak Yogyakarta 55242. email :
[email protected] website : www.bukulokomedia.com Copyright © Lokomedia, 2014
Hak Cipta dilindungi oleh Undang-Undang Dilarang memperbanyak, mencetak ataupun menerbitkan sebagian maupun seluruh isi buku ini tanpa izin tertulis dari penerbit.
ii
UCAPAN TERIMA KASIH
Allah SWT, tanpa-Mu semua ini tidak mungkin. Ayah (Basuki Adi), Ibu (Endang Sri Hartini); untuk kesabaranmu dan semuanya. Adik-adikku, Bangkit, Tiwi; semoga kalian sukses. Bapak/Ibu Guru dan Dosen (yang tidak dapat saya sebut semuanya satu persatu) yang telah mengajar dan mendidikku hingga aku menjadi diriku saat ini. Pak Sahudi (Alm), Pak Bambang (Alm), Bu Hartini (Almh); semoga Allah SWT menempatkan Anda semua di sisi-Nya. Teman-teman yang tidak “rewel” selama saya menghilang dari peredaran untuk mengerjakan buku ini; Bambang dan Rani (trims untuk mouse dan kopi-nya, kapan ke Semeru???), Ivan (setelah ini aku ikut jadi kenek truk, Jakarta?), Toni (selamat sudah jadi ayah), Novi dan Mas Hartoyo, Huda (sorry kemarin gak datang, lagi sakit, semoga menjadi keluarga sakinah), Eko (suwun, Le), Mas Fitriono dan Mbak Fitri (trims untuk doa-nya), Mas Dondik (semoga laris es cappuccino-nya), Mas Arif (trims untuk penjelasannya), Linto (selamat sudah jadi PNS, bro). KH. Alfan, KH. Nur Hafidz, Bapak H. Harsono, Pak Gatot, Pak Toyub, Pak Purwono, Mas Pipit, Mas Eko, Mas Ali, Mas Nanang, Cak Solikin, Cak Keceng, Rollis, Bayu; semoga saya segera bisa bergabung lagi. Warung Pecel Mak-e Cak Dugel (sahabat kelaparan saat tengah malam, sambel super pedes dan peyek teri-nya mengalahkan rasa ngantukku).
iii
Rick Ellis (thanks for CI but don’t screw up!), Phil Sturgeon (thanks for articles and libraries), Derek Allard (Thanks for To_Excel helper), Jamie Rumbelow (Thanks for MY_Model). Semua anggota komunitas pengguna Codeigniter di dunia, saya berhutang banyak pada kalian. Thanks. Masha and The Bear, Standup Comedy MetroTV, Kick Andy, Just Alvin, OVJ, Nat Geo Wild, Indonesian Idol, Sinema Tengah Malam, Winamp. Trims sudah menemani dan mengusir kejenuhan. Para pembaca yang sudah membeli buku ini, dengan begitu Anda telah membantu saya untuk membeli sebuah Lamborghini :) Last but not least, Penerbit Lokomedia yang untuk kedua kalinya bersedia menerbitkan buku saya. Semoga makin sukses. Yang nggak disebut jangan marah!
iv
KATA PENGANTAR
Tren pengembangan sebuah aplikasi berbasis PHP dewasa ini sudah sangat tergantung kepada framework. Framework menyediakan struktur dasar bagi aplikasi yang sedang dikembangkan, sehingga Programmer dapat segera berkonsentrasi kepada pembuatan fitur-itur aplikasi yang sedang dikerjakan alih-alih membuat aplikasi tersebut dari awal. Dengan demikian proses pembuatan aplikasi menjadi lebih cepat dan efisien. Framework adalah paket berisi fungsi-fungsi yang biasa digunakan dalam pembuatan sebuah aplikasi. Beberapa contoh fungsi standar yang biasa ada pada sebuah framework misalnya: email, paging, kalender, tanggal, bahasa, upload file, session, validasi form, tabel, manipulasi gambar, text, string, captcha, enkripsi, proteksi terhadap XSS, security dan lain-lain. Fungsi-fungsi tersebut dapat segera digunakan dengan cara memanggilnya pada program, tentu saja cara memanggilnya tergantung dari framework yang digunakan. Jadi, Programmer tidak perlu membuat lagi fungsi-fungsi tersebut dari awal. Keuntungan lain dari penggunaan framework adalah gaya (style) pemrograman dapat menjadi seragam dan terstandar. Mengapa hal ini diperlukan? Kecuali Anda bekerja sendiri hal itu tidak menjadi masalah. Lain halnya jika Anda adalah salah satu anggota tim dalam sebuah perusahaan pengembang perangkat lunak (software house), hal ini menjadi sangat penting. Gaya pemrograman yang beraneka ragam bisa membingungkan anggota tim lainnya, sehingga menghambat proses pembuatan program. Program yang dibuat menggunakan framework, “memaksa” Programmer untuk mengikuti aturan dalam penggunaannya. Jadi, siapapun Programmernya asal ia menguasai framework tersebut, dipastikan ia bisa mengerjakan program yang dibuat karena gaya pemrograman yang sudah seragam. Tidak heran, banyak lowongan pekerjaan di bidang software development mensyaratkan Programmer untuk menguasai framework. Penguasaan framework membuat kinerja perusahaan lebih baik dan efisien. Selain itu, umumnya perusahaan menerapkan sistem kontrak dalam perekrutan Programmer. Sehingga tingkat turn over-nya sangat tinggi, Programmer dapat bergonta-ganti, keluar-masuk perusahaan dalam tempo yang cepat. Nah, jika Programmer pengganti menguasai framework yang biasa digunakan di perusahaan, maka hal ini tidak menjadi masalah, operasional perusahaan tidak terganggu.
v
Saat ini banyak sekali framework berbasis PHP, diantaranya: Zend Framework, Symfony, Prado, CakePHP, Yii, Laravel, Codeigniter dan lain-lain. Frameworkframework tersebut memiliki kelebihan dan kekurangannya masing-masing, begitu pula dengan Codeigniter. Pertanyaannya, mengapa memilih Codeigniter? Terlepas dari segala kekurangannya dibanding framework lainnya, Codeigniter adalah framework dengan ukuran kecil, waktu eksekusi yang minimal dan dapat diandalkan. Menurut survei, Codeigniter adalah framework yang paling mudah untuk dipelajari. Strukturnya sederhana, dokumentasinya lengkap dan jelas. Hal ini membuat Programmer pemula (fresh graduate) yang tidak terbiasa menggunakan framework, mampu dengan mudah menguasainya. Framework-framework yang ada di pasaran saat ini umumnya menggunakan konsep MVC (Model-View-Controller). Dengan diterapkannya konsep ini, program menjadi lebih rapi, tidak bercampur antara logic dan presentation (spaghetti code). Sehingga program dapat di-maintain dengan mudah. Dengan menguasai konsep dasar MVC, bisa dikatakan Anda sudah menguasai garis besar framework, apapun frameworknya. Pemahaman ini dapat diterapkan di framework-framework lainnya, tentu saja secara teknis harus menyesuaikan aturan framework yang digunakan. Satu lagi konsep yang perlu dikuasai untuk memudahkan Anda dalam belajar framework, yaitu OOP (Object Oriented Programming). Karena pada dasarnya, “core” framework adalah kumpulan class yang saling berhubungan. Bagaimana seandainya jika Anda belum menguasai konsep-konsep tersebut? Jangan khawatir, buku ini akan membantu Anda dalam mempelajari Codeigniter apapun tingkat skill yang Anda miliki. Pembahasan di dalam buku ini sangat mendetail, dimulai dengan Instalasi Codeigniter, kemudian menjelaskan tentang Dasar-Dasar Codeigniter. Dilanjutkan dengan studi kasus pembuatan “Program Absensi Siswa 2014”, dimulai dari proses pengumpulan data, perancangan database, hingga membuat modul-modul (Login, Kelas, Siswa, Semester, Absen, Rekap) yang diperlukan aplikasi. Terakhir, buku ini akan mengajarkan Anda cara membuat laporan dalam format Excel dan PDF yang datanya berasal dari database, dalam hal ini Laporan Data Absensi Siswa. Saya menyadari banyak kekurangan pada penulisan buku ini, untuk itu saran dan kritik yang membangun akan sangat berguna bagi penyempurnaan buku ini untuk edisi-edisi mendatang. Pasirian, Februari-Maret 2014 Awan Pribadi Basuki
vi
DAFTAR ISI
BAB 1. Pembuka................................................................................................1 1.1. Tentang Buku Ini...........................................................................................2 1.2. Versi Server...................................................................................................3 1.3. Versi CodeIgniter..........................................................................................4 BAB 2. Instalasi CodeIgniter............................................................................5 2.1. Mendapatkan CodeIgniter............................................................................6 2.2. Proses Instalasi CodeIgniter.........................................................................6 BAB 3. Dasar-Dasar CodeIgniter..................................................................11 3.1. Apa itu Framework?....................................................................................12 3.2. Mengapa Memilih CodeIgniter?................................................................13 3.3. Fitur-Fitur CodeIgniter................................................................................14 3.4. Kebutuhan Sistem.......................................................................................15 3.5. Aliran Data CodeIgniter..............................................................................16 3.6. Struktur Folder CodeIgniter........................................................................17 3.7. Macam-Macam File CodeIgniter...............................................................20 3.8. Konfigurasi Dasar CodeIgniter...................................................................22 3.8.1. config.php..........................................................................................22 3.8.2. database.php......................................................................................23 3.9. Model-View-Controller (MVC).................................................................23 3.10. URL CodeIgniter.......................................................................................29 3.10.1. URI Segment...................................................................................29 vii
3.10.2. Menghilangkan index.php..............................................................30 3.11. Controllers.................................................................................................31 3.11.1. Apa itu Controller?..........................................................................31 3.11.2. Membuat Controller........................................................................31 3.11.3. Method/Fungsi................................................................................32 3.11.4. Memberi Parameter untuk Method................................................33 3.11.5. Default Controller...........................................................................33 3.11.6. Menyimpan Controller ke dalam Sub-Folder................................34 3.11.7. Constructor Controller....................................................................35 3.12. View...........................................................................................................36 3.12.1. Membuat View................................................................................36 3.12.2. Memanggil View.............................................................................36 3.12.3. Memanggil Beberapa View Sekaligus...........................................38 3.12.4. Menyimpan View ke dalam Sub-Folder........................................39 3.12.5. Menambahkan Data pada View.....................................................39 3.12.6. Melakukan Perulangan (Looping).................................................40 3.13. Model.........................................................................................................42 3.13.1. Membuat Model..............................................................................43 3.13.2. Memanggil dan Menggunakan Model...........................................44 3.13.3. Auto-Loading Model......................................................................45 3.13.4. Menghubungkan Model dengan Database....................................45 3.13.5. Constructor Model..........................................................................46 3.14. Library.......................................................................................................47 3.14.1. Membuat Library............................................................................51 3.14.2. Constructor Library.........................................................................52 3.14.3. Memanggil dan Menggunakan Custom Library...........................52 3.14.4. Mennggunakan Resource CodeIgniter Custom Library...............53
viii
3.14.5. Me-Replace Native Library............................................................54 3.14.6. Meng-Extend Native Library.........................................................54 3.14.7. Core Class.......................................................................................55 3.15. Helper........................................................................................................57 3.15.1. Memanggil dan Menggunakan Helper..........................................60 3.15.2. Membuat Helper.............................................................................60 3.15.3. Meng-Extend Helper......................................................................61 3.16. Auto-Loading............................................................................................62 3.17. URI Routing..............................................................................................63 3.18. Error Handling..........................................................................................65 3.19. File Bahasa................................................................................................66 3.19.1. Cara ke-1 (Menerjemahkan Langsung).........................................66 3.19.2. Cara ke-2 (Membuat File Bahasa Sendiri)....................................67 BAB 4. Proyek Program Absensi Siswa........................................................69 4.1. Tentang Program Absensi Siswa 2014.......................................................70 4.2. Spesifikasi Program Absensi Siswa...........................................................71 4.3. Mengedit Primary Key Tabel.....................................................................71 BAB 5. Membuat Database Absensi Siswa...................................................73 5.1. Merancang Database...................................................................................74 5.2. Membuat Database di MySQL...................................................................76 5.3. Foreign Key dan Referential Integrity.......................................................76 BAB 6. Persiapan Awal Proyek......................................................................79 6.1. Mengatur Konfigurasi (config.php)............................................................80 6.2. Membuat File .htaccess..............................................................................81
ix
6.3. Mengatur Database (database.php)............................................................81 6.4. Mengatur Auto-Loading (autoload.php)....................................................81 6.5. Mengatur Rute (routing.php)......................................................................82 6.6. Membuat File Bahasa Indonesia................................................................83 6.7. Membuat Cek Status Login (MY_Controller.php)....................................86 6.8. Membuat Controller Error (error404.php).................................................87 6.9. Membuat View Error (view404.php).........................................................87 6.10. Merancang Layout Halaman....................................................................89 6.10.1. Membuat Template (template.php)................................................91 6.10.2. Membuat Header (masthead.php)..................................................92 6.10.3. Membuat Menu Navigasi (navigation.php)...................................93 6.10.4. Membuat Footer (footer.php).........................................................93 6.11. Asset (CSS, Javascript, images)...............................................................94 BAB 7. Modul Login dan Logout...................................................................97 7.1. Controller Login..........................................................................................98 7.2. Model Login..............................................................................................100 7.3. View Login................................................................................................103 7.4. Ujicoba Modul Login dan Logout............................................................106 BAB 8. Modul Kelas......................................................................................109 8.1. Controller Kelas........................................................................................110 8.2. Model Kelas.............................................................................................. 111 8.3. Menampilkan Data Kelas......................................................................... 111 8.4. Menambahkan Kelas................................................................................117 8.5. Mengedit Kelas.........................................................................................124 8.6. Menghapus Kelas......................................................................................136
x
BAB 9. Modul Semester................................................................................141 9.1. Controller Semester..................................................................................142 9.2. Model Semester........................................................................................143 9.3. Menampilkan Form untuk Mengatur Semester.......................................143 9.4. Mengatur Semester yang Aktif.................................................................148 BAB 10. Modul Siswa....................................................................................153 10.1. Controller Siswa......................................................................................154 10.2. Model Siswa............................................................................................154 10.3. Menampilkan Data Siswa.......................................................................154 10.4. Menambahkan Siswa..............................................................................163 10.5. Mengedit Siswa.......................................................................................171 10.6. Menghapus Siswa...................................................................................176 BAB 11. Modul Absen....................................................................................181 11.1. Controller Absen.....................................................................................182 11.2. Model Absen...........................................................................................183 11.3. Menampilkan Data Absen......................................................................183 11.4. Menambahkan Absen..............................................................................192 11.5. Mengedit Absen......................................................................................202 11.6. Menghapus Absen...................................................................................210 BAB 12. Modul Rekap (Laporan)...............................................................213 12.1. Controller Rekap.....................................................................................214 12.2. Model Rekap...........................................................................................215 12.3. Menampilkan Data Rekap Absensi........................................................215 12.4. Membuat Laporan Excel........................................................................224
xi
12.5. Membuat Laporan PDF..........................................................................229 BAB 13. Penutup............................................................................................238 Daftar Pustaka................................................................................................240
xii
BAB I
Pembuka
BAB 1
Pembuka
1.1 Tentang Buku Ini Sebelumnya saya pernah menulis sebuah buku berjudul “Membangun Web Berbasis PHP dengan Framework Codeigniter” yang juga diterbitkan penerbit Lokomedia pada tahun 2010. Lihat gambar 1.1.
Gambar 1.1 Cover buku Membangun Web Berbasis PHP dengan CodeIgniter
2
Proyek Website Berbasis PHP dengan Codeigniter
Buku itu cukup populer dan menjadi BEST SELLER, karena merupakan buku pertama berbahasa Indonesia yang membahas Codeigniter dan menyajikan contoh nyata bagaimana membuat sebuah aplikasi dengan Codeigniter. Banyak pembaca yang berkomentar bahwa buku itu sangat mudah dimengerti dan sangat membantu mereka, terutama teman-teman pemula yang baru belajar Codeigniter, siswa SMK atau mahasiswa. Bahkan hingga kini saya masih menerima email dari pembaca buku itu. Namun seiring dengan waktu, isi dari buku itu sudah tidak up to date. Buku ini adalah “adik” dari buku tersebut. Untuk itu, saya telah melakukan perubahan pada struktur buku, agar pembahasannya menjadi lebih terstruktur dan mendetail, sehingga pembaca lebih mudah dalam mengikuti dan memahami pembahasannya. Penjelasan tentang Codeigniter akan disesuaikan dengan versi terkini. Studi kasus berupa pembuatan program absensi siswa juga telah diperbaiki, versi Codeigniter yang dipakai telah di update ke versi 2.1.4 (sebelumnya memakai versi 1.7.2), beberapa “lubang” telah ditutup, serta ditambahkan beberapa fitur yang sebelumnya tidak ada, seperti kalender pop-up pada modul absen untuk memudahkan pengisian field tanggal dan pembuatan laporan dalam format PDF. Namun menurut saya pribadi, peningkatan yang paling berarti adalah skrip program absensi siswa telah ditulis ulang sehingga lebih rapi. Semua perbaikan itu akan disajikan kembali dalam bentuk “Program Absensi Siswa 2014” yang dibahas mulai Bab 5 hingga akhir buku.
1.2 Versi Server Pengembangan aplikasi berbasis PHP umumnya membutuhkan 3 komponen dasar; Apache sebagai server, PHP engine untuk memparser skrip PHP, dan MySQL sebagai database untuk menyimpan data. Menginstall dan mengkonfigurasi ketiga komponen tersebut satu per satu tidak praktis, membutuhkan waktu relatif lebih lama dan cukup merepotkan, terutama bagi pemula. Cara yang lebih mudah dan praktis menggunakan aplikasi untuk menginstall ketiga komponen itu dalam satu paket. Untuk alasan itulah buku ini menggunakan WampServer 2.4, didalamnya terdapat: Apache 2.4.4 PHP 5.4.16 MySQL 5.6.12
Bab I. Pembuka
3
Agar Anda dapat mengikuti instruksi-instruksi yang terdapat di buku ini dengan lancar, saya berasumsi bahwa Anda juga menggunakan WampServer versi 2.4. Jika Anda memakai aplikasi lain atau paket alternatif lain seperti Xampp versi 1.8.0 yang jugad disertakan di CD, silakan menyesuaikan sesuai dengan aplikasi yang Anda pakai. Catatan: Untuk instalasi WampServer 2.4 dan Xampp 1.8.0 tersedia dalam bentuk Video Tutorial yang ada di CD. Apabila Anda menggunakan Xampp 1.8.0, Anda tidak perlu mengaktifkan mod_rewrite untuk mendukung URL SEO Friendly, namun kalau Anda menggunakan WamServer 2.4, Anda perlu mengaktifkan mod_rewrite secara manual, caranya bisa dilihat langsung pada Video Tutorial yang ada di CD.
1.3 Versi Codeigniter Pada saat proses penulisan buku ini sedang berlangsung (Februari-Maret 2014), versi terbaru Codeigniter adalah versi 2.1.4, versi ini pula yang saya gunakan dalam penulisan buku ini. Agar Anda dapat mengikuti pembahasan di buku dengan baik dan tidak mengalami kendala, saya sarankan Anda memakai Codeigniter versi 2.14. Jika Anda memakai Codeigniter versi 1.7.x atau sebelumnya, mungkin Anda akan mengalami kendala dalam mengikuti instruksi yang terdapat di buku ini, karena Codeigniter 1.7.x tidak “compatible” dengan Codeigniter 2.x.x. Saya akan memberikan keterangan dan informasi singkat tentang hal ini pada bagian-bagian yang relevan. Selanjutnya dalam pembahasan buku ini, jika disebutkan “Codeigniter” maka hal ini akan mengacu pada Codeigniter versi 2.1.4, kecuali saya menyebutkan secara spesifik versinya.
4
Proyek Website Berbasis PHP dengan Codeigniter
BAB II
Instalasi Codeigniter
BAB 2
Instalasi Codeigniter
2.1 Mendapatkan Codeigniter Sebelum menginstall Codeigniter, kita perlu mendapatkan file instalasinya. Anda bisa mendownload di http://ellislab.com/codeigniter/download. Lihat gambar 2.1.
Gambar 2.1 Website resmi CodeIgniter
Atau Anda juga bisa menemukan file instalasi Codeigniter pada CD yang menyertai buku ini di folder installer/codeigniter.
2.2 Proses Instalasi Codeigniter Selanjutnya, ikuti langkah-langkah berikut untuk menginstall Codeigniter: 1. Buat folder absensi2014 di C:\xamp\htdocs (atau C:\wamp\www untuk pengguna WampServer). Lihat gambar 2.2.
6
Proyek Website Berbasis PHP dengan Codeigniter
Gambar 2.2 Membuat folder absensi2014 di C:\xampp\htdocs
2. Kemudian klik kanan file instalasi CodeIgniter (CodeIgniter_2.1.4.zip) yang ada di CD, lalu pilih Extract files. Lihat gambar 2.3.
Gambar 2.3 Mengklik kanan file instalasi codeigniter dan memilih Extract files
Bab II. Instalasi Codeigniter
7
3. Selanjutnya, pilih lokasi untuk mengekstrak filenya. Pastikan lokasi tujuannya ke C:\xampp\htdocs\absensi2014. Lihat gambar 2.4.
Gambar 2.4 Memilih lokasi tujuan ekstrak file Codeigniter
4. Jika proses ekstrak berjalan dengan baik, maka Anda akan mendapati file-file dan folder dari file instalasi Codeigniter seperti pada gambar 2.5.
8
Proyek Website Berbasis PHP dengan Codeigniter
Gambar 2.5 Hasil ekstrak file instalasi CodeIgniter berupa file dan folder
5. Perhatikan pada gambar 2.5, hapus ketiga file dan folder yang ditunjukkan gambar, karena ketiganya tidak diperlukan dalam pembuatan proyek. 6. Untuk menguji apakah proses instalasi Codeigniter berjalan dengan baik, coba buka browser dan ketikkan http://localhost/absensi2014. Jika Anda mendapatkan halaman Welcome to Codeigniter, maka proses instalasi Codeigniter berhasil. Lihat gambar 2.6.
Bab II. Instalasi Codeigniter
9
Gambar 2.6 Halaman Selamat Datang dari CodeIgniter
10
Proyek Website Berbasis PHP dengan Codeigniter