1st Edition (Dapatkan segera, akan terbit di pasaran gelap tidak lama lagi..) Dengan Menggunakan Framework PHP Yang Popular Sebuah Panduan Membangunkan Aplikasi Web
Pengenalan
Apa itu CodeIgniter
CodeIgniter merupakan sebuah framework aplikasi web yang telah dibangunkan dengan bersifat sumber terbuka dan boleh digunakan secara percuma. Ia dibangunkan bertujuan membantu para pembangun laman web menghasilkan aplikasi dengan lebih pantas dan mempunyai struktur fail yang lebih tersusun dan mudah difahami oleh pembangun yang lain. CodeIgniter menggunapakai konsep Model-View-Controller..
Kenapa memilih CodeIgniter Keperluan sebagai seorang pembangun web Apa kandungan dalam buku ini Mematuhi Piawai & Kesepakatan
Setiap Model mewakili satu table Jika menggunakan Bahasa Inggeris, nama Model adalah singular dan nama table adalah plural Nama Class mesti dimulai dengan huruf besar Penamaan Class & Method yang seragam Contoh nama: get_file_properties() //underscore_case lebih mudah dibaca Contoh nama: getFileProperties() // camelCase lebih nampak elegen Jadi buat pilihan anda dan seragamkan. Setiap table wajib mempunyai kolum id Setiap table juga wajib mempunyai dua medan ini, created_at dan updated_at
BAB 1 Pemasangan
BAB 1 Pemasangan
Apa yang akan diterangkan dalam bab ini? Cara memuatturun CI Cara memasang CI Membina antaramuka pertama
Muatturun
Fail CodeIgniter (CI) boleh dimuatturun melalui laman web http://codeigniter.com.
Pemasangan
Apa yang perlu ada sebelum kita teruskan? Komputer anda mesti tersedia dengan perisian web server (apache, tomcat atau IIS), pangkalan data (MySQL atau Oracle) dan PHP. Cara yang mudah, gunakan pakej perisian seperti Wampserver, XAMPP atau sebagainya. Unzip fail CodeIgniter_2.1.2.zip dan pindahkan ke folder htdocs/. Rename fail tadi kepada htdocs/myci Buka pelayar internet (browser) anda dan taipkan URL http://localhost/myci Anda akan perolehi paparan default CI.
Bina View
Bagaimana cara menghasilkan view? Bina folder myci/application/views/utama Bina fail baru myci/application/views/utama/selamatdatang.php Buka fail tersebut dan masukkan kandungannya seperti berikut:
Bina Controllers
Bagaimana cara menghasilkan Controller? Bina fail baru myci/application/controllers/utama.php Buka fail tersebut dan masukkan kandungannya seperti berikut:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Utama extends CI_Controller { function index() { $this->load->view('utama/selamatdatang'); } } /* End of file utama.php */ /* Location: ./application/controllers/utama.php */
Rajah 1 Perhatikan baris kod ini, $this->load->view('utama/selamatdatang'); ia bertindak memanggil kandungan di dalam fail selamatdatang.php untuk dipaparkan kepada pengguna melalui browser.
Ikuti langkah berikut untuk menjadikan URL aplikasi yang kita bangunkan supaya kelihatan lebih efisyen & elegen: Bina fail htdocs/myci/.htaccess Masukkan kandungan fail:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /myci/ #Removes access to the system folder by users. #Additionally this will allow you to create a System.php controller, #previously this would not have been possible. #'system' can be replaced if you have renamed your system folder. RewriteCond %{REQUEST_URI} ^system.* RewriteRule ^(.*)$ /index.php?/$1 [L] #When your application folder isn't in the system folder #This snippet prevents user access to the application folder #Submitted by: Fabdrol #Rename 'application' to your applications folder name. RewriteCond %{REQUEST_URI} ^application.* RewriteRule ^(.*)$ /index.php?/$1 [L] #Checks to see if the user is attempting to access a valid file, #such as an image or css document, if this isn't true it sends the #request to index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule> <IfModule !mod_rewrite.c> # If we don't have mod_rewrite installed, all 404's # can be sent to index.php, and everything works as normal. # Submitted by: ElliotHaughin ErrorDocument 404 /index.php </IfModule>
Buka fail myci/application/config/config.php Cari kod aturcara $config['index_page'] = 'index.php'; atau pergi ke baris 29. Padamkan 'index.php' menjadi $config['index_page'] = '';
$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http"); $config['base_url'] .= "://".$_SERVER['HTTP_HOST']; $config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"", $_SERVER['SCRIPT_NAME']);
$route['default_controller'] = "utama";
Sekarang, apabila anda menaip URL http://localhost/myci tanpa '/utama', anda akan terus di bawa ke paparan 'Selamat Datang!'.
Latihan
Dalam masa 5 minit, bina satu paparan baru yang menyatakan 'Terima Kasih' kepada pengunjung laman web anda.
CREATE TABLE `peserta` ( `id` int(11) NOT NULL AUTO_INCREMENT, `no_kp` varchar(15) DEFAULT NULL, `nama_penuh` varchar(255) DEFAULT NULL, `emel` varchar(255) DEFAULT NULL, `no_telefon` varchar(12) DEFAULT NULL, `jawatan` varchar(255) DEFAULT NULL, `majikan` varchar(255) DEFAULT NULL, `status` char(1) DEFAULT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Ataupun, anda boleh run skrip SQL di atas dalam phpMyAdmin pada menu tab SQL. Copy and paste skrip di atas ke ruangan yang disediakan dan klik butang Go
10
Buka fail myci/application/config/autoload.php Pada baris ke-55, masukkan 'database' pada ruang kosong supaya sama seperti di bawah:
$autoload['libraries'] = array('database');
Refresh aplikasi anda di browser untuk semak sama terdapat ralat pada sambungan ke pangkalan data yang telah dilakukan. Anda akan menerima mesej 'Unable to connect to your database server using the provided settings' sekiranya terdapat kesilapan pada maklumat yang diberikan di dalam fail database.php Jika tidak, bermakna sambungan aplikasi anda ke pangkalan data telah berjaya
11
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Mpeserta extends CI_Model { function __construct() { parent::__construct(); } } /* End of file mpeserta.php */ /* Location: ./application/models/mpeserta.php */
Bina satu method/function untuk membaca kesemua data dari table peserta di dalam class Mpeserta seperti berikut:
function get_all() { return $this->db->order_by('nama_penuh','asc') ->get('peserta') ->result_array(); }
12
<h3>Senarai Peserta</h3> <table> <thead> <tr> <th>#</th> <th>Nama</th> <th>Jawatan</th> <th>Status</th> <th></th> </tr> </thead> <tbody> <?php if($peserta): $kira = 0; foreach($peserta as $row): $kira++; ?> <tr> <td><?= $kira ?></td> <td><?= $row['nama_penuh'] ?></td> <td><?= $row['jawatan'] ?></td> <td><?= $row['status'] ?></td> <td>Kemaskini | Hapus</td> </tr> <?php endforeach; endif; ?> </tbody> </table>
13
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Peserta extends CI_Controller { public function __construct() { parent::__construct(); // Your own constructor code } } /* End of file peserta.php */ /* Location: ./application/controllers/peserta.php */
Anda perlu bina satu method baru yang akan berfungsi untuk memanggil model Mpeserta bagi mendapatkan data peserta dan seterusnya menghantar data tersebut ke paparan pengguna. Bina method index() seperti berikut di dalam class Peserta:
function index() { $data['peserta'] = $this->Mpeserta->get_all(); $this->load->view('peserta/senarai',$data); }
Sebelum anda boleh menggunakan Model Mpeserta, anda perlu memanggilnya terlebih dahulu. Terdapat 2 cara untuk anda melakukannya: 1. Memanggil melalui Controller
$this->load->model('Mpeserta');
2. Setkan pada fail autoload.php Cara ini membolehkan anda menggunakan Model di mana-mana Controller. Untuk melakukannya, ikuti langkah berikut: Buka fail myci/application/config/autoload.php Pergi pada baris ke-112 dan masukkan nama Model anda ruangan array seperti dalam kod di bawah:
14
Dalam tutorial ini, kita akan gunakan kaedah yang kedua ini
Sekarang, melalui browser, masukkan URL http://localhost/myci/peserta dan anda boleh lihat hasilnya sama seperti dalam Rajah 2.
Rajah 2
Latihan
Anda dikehendaki membina satu table baru iaitu negeri dengan 3 kolum iaitu id, negeri & singkatan. Kemudian paparkan data senarai negeri yang anda masukkan melalui phpMyAdmin kepada pengunjung laman web anda apabila mereka menaip URL http://localhost/myci/negeri.
15
BAB 3 CRUD
16
BAB 3 CRUD
Dalam bab ini, kita akan belajar bagaimana menghasilkan sebuah proses yang lengkap untuk menyimpan, membaca, mengemaskini dan menghapuskan data.
Sediakan Model
Kita akan gunakan data kursus untuk contoh tutorial ini. Mari kita hasilkan table kursus terlebih dahulu.
CREATE TABLE `kursus` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nama_kursus` varchar(255) NOT NULL, `keterangan` varchar(255) NOT NULL, `tarikh_mula` datetime NOT NULL, `tarikh_tamat` datetime NOT NULL, `tempat` varchar(255) NOT NULL, `yuran` decimal(10,0) NOT NULL, `penganjur` varchar(255) NOT NULL, `sasaran_peserta` varchar(255) NOT NULL, `status` char(1) NOT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; --- Dumping data for table `kursus` -INSERT INTO `kursus` VALUES(1, 'Kursus Penulisan Buku', 'Tulisan adalah rahsia menjenamakan diri, menjenamakan bisnes dan menjenamakan organisasi. Ia terbukti sejak awal lagi. Tulisan meningkatkan keuntungan organisasi, dan memberi imej pada diri. Soalnya bagaimana. Saya beritahu caranya.', '2012-09-27 00:00:00', '2012-09-28 00:00:00', 'Dewan Seminar', 150, 'DBP', 'Bakal penulis', '1', '2012-09-23 00:13:18', '2012-09-23 00:13:21'); INSERT INTO `kursus` VALUES(2, 'Kursus Pra Perkahwinan', '-', '2012-10-23 00:00:00', '2012-10-24 00:00:00', 'Dewan Utama, UTHM', 80, 'UTHM', 'Bagi mereka yang bakal berkahwin', '1', '2012-09-23 00:14:44', '2012-09-23 00:14:47');
17
Membina Aplikasi Web Dengan CodeIgniter Bina satu fail myci/application/models/mkursus.php Kandungan fail adalah seperti berikut:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Mkursus extends CI_Model { function __construct() { parent::__construct(); } } /* End of file mkursus.php */ /* Location: ./application/models/mkursus.php */
Seperti biasa, pastikan kita panggil fail Model Mkursus tersebut dengan letakkannya di dalam fail autoload.php
Kemudian, kita perlu menyediakan setiap method yang terlibat dalam CRUD seperti berikut: Method untuk membaca semua data dalam bentuk senarai
function get_all() { return $this->db->order_by('tarikh_mula','desc') ->get('kursus') ->result_array(); }
18
19
Sediakan View
Kesemua View bagi paparan maklumat Kursus perlu disimpan di dalam satu folder supaya memudahkan pengurusan fail dan kelihatan kemas. Bina satu folder baru myci/application/views/kursus Oleh kerana kita akan menggunakan Helper bagi pautan, maka kita perlu panggil Helper tersebut melalui fail autoload.php. Sebagai contoh, lihat pada Rajah 3.
<a <?= href=http://localhost/kursus/senarai anchor('kursus/senarai','Pautan') ?> >Pautan</a>
Untuk menggunakannya, ikuti langkah berikut: Buka fail myci/application/config/autoload.php Pada baris ke-67, masukkan 'url' seperti di bawah:
$autoload['helper'] = array('url');
<h3>Senarai Kursus</h3> <?= anchor('kursus/borang/','Tambah Kursus') ?> <table> <thead> <tr> <th>#</th> <th>Kursus</th> <th>Tarikh</th> <th>Tempat</th> <th></th> </tr> </thead> <tbody> <?php if($kursus): $kira = 0; foreach($kursus as $row): $kira++; ?> <tr>
20
<?php if($kursus): ?> <h3><?= $kursus['nama_kursus'] ?></h3> <p><?= $kursus['keterangan']?></p> <h4>Tarikh</h4> <p><?= date('d/m/Y',strtotime($kursus['tarikh_mula'])) ?> - <?= date('d/m/Y',strtotime($kursus['tarikh_tamat'])) ?></p> <h4>Tempat</h4> <p><?= $kursus['tempat']?></p> <h4>Yuran</h4> <p>RM <?= $kursus['yuran']?></p> <h4>Penganjur</h4> <p><?= $kursus['penganjur']?></p> <h4>Sasaran Peserta</h4> <p><?= $kursus['sasaran_peserta']?></p> <?php endif; ?> <a href="javascript:window.history.back()">« Kembali</a>
21
$autoload['helper'] = array('url','form');
Kita akan menggunakan bantuan Helper yang dsediakan oleh CI untuk membuat borang kemasukan maklumat Kursus. Bina satu fail baru myci/application/views/kursus/borang.php
<h3>Borang Tambah Kursus</h3> <?= form_open('kursus/borang') ?> <fieldset> <legend> Maklumat Kursus </legend> <div> <label>Nama Kursus</label> <?= form_input('nama_kursus') ?> </div> <div> <label>Keterangan</label> <?php $data = array( 'name'=>'keterangan', 'rows'=>'5', 'cols'=>'50'); ?> <?= form_textarea($data) ?> </div> <div> <label>Tarikh Mula</label> <?= form_input('tarikh_mula') ?> </div> <div> <label>Tarikh Tamat</label> <?= form_input('tarikh_tamat') ?> </div> <div> <label>Tempat</label> <?= form_input('tempat') ?> </div> <div> <label>Yuran</label> <?= form_input('yuran') ?> </div>
22
<h3>Borang Kemaskini Kursus</h3> <?= form_open('kursus/edit/'.$id) ?> <fieldset> <legend> Maklumat Kursus </legend> <div> <label>Nama Kursus</label> <?= form_input('nama_kursus',$kursus['nama_kursus']) ?> </div> <div> <label>Keterangan</label> <?php $data = array( 'name'=>'keterangan', 'rows'=>'5', 'cols'=>'50', 'value'=>$kursus['keterangan']);
23
24
Sediakan Controller
Bina fail baru myci/application/controllers/kursus.php Kandungan fail seperti berikut:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Kursus extends CI_Controller { public function __construct() { parent::__construct(); // Your own constructor code } } /* End of file kursus.php */ /* Location: ./application/controllers/kursus.php */
25
'keterangan'
function edit($id=0) { $where = array('id'=>$id); if($_POST): $tm = explode('/',$this->input->post('tarikh_mula')); list($d,$m,$y) = $tm; $tarikh_mula = $y.'-'.$m.'-'.$d; $tt = explode('/',$this->input->post('tarikh_tamat')); list($d,$m,$y) = $tt; $tarikh_tamat = $y.'-'.$m.'-'.$d; $data = array( >post('nama_kursus'), >post('keterangan'), 'tarikh_mula' 'tarikh_tamat' 'tempat' => $tarikh_mula, => $tarikh_tamat, => $this->input'nama_kursus' => $this->input=> $this->input-
'keterangan'
26
Bersambung... 27