|
Untuk mengikuti tutorial ini, Anda harus membaca dulu bagian awalnya di sini
Mengakses database MySQL
Kita buat dahulu database dan tabel menggunakan perintah berikut:
CREATE DATABASE ci;
DROP TABLE IF EXISTS `entries`;
CREATE TABLE IF NOT EXISTS `entries` (
`id` int(11) unsigned NOT NULL auto_increment,
`title` varchar(128) default NULL,
`body` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Untuk mengatur koneksi ke database, bukalah file system/application/config/database.php dan ubah variabel-variabel yang diperlukan. Dalam hal ini, $db['default']['database'] = "ci"; dan $db['default']['dbdriver'] = "mysql";
Perlu diketahui bahwa secara default database tidak diaktifkan. Kita perlu mengaktifkannya dari file system/application/config/autoload.php. Untuk mengaktifkan database, atur variabel $autoload['libraries'] seperti berikut:
$autoload['libraries'] = array('database');
Catatan: Untuk versi CI di bawah 1.7.0 (CI 1.6.3 ke bawah), gunakan variabel $autoload['core'].
$autoload['core'] = array('database');
Refresh halaman http://localhost/ci/. Jika tidak ada error, berarti koneksi berhasil. Jika ada error, cek lagi pengaturan di file database.php dan autoload.php.
Scaffolding
CI menyediakan fasilitas untuk menambah, mengubah, dan menghapus isi dari suatu tabel pada database yang dinamakan dengan scaffolding. Perlu diingat bahwa scaffolding hanya berlaku untuk tabel yang memiliki sebuah primary key. Juga, jangan lupa untuk menonaktifkan fasilitas scaffolding ini jika Anda mem-publish website Anda, karena sangat rentan untuk masalah keamanan.
Untuk mengaktifkan scaffolding, buka file system/application/config/routes.php dan isi variabel $route['scaffolding_trigger'] dengan alamat scaffolding Anda. Misalnya:
$route['scaffolding_trigger'] = "db_manage";
Selanjutnya, untuk mengaktifkan fasilitas scaffolding pada tabel entries yang baru kita buat, ubah sedikit constructor pada class Blog(), yaitu function Blog() pada file blog.php menjadi seperti berikut:
function Blog() {
parent::Controller();
$this->load->scaffolding('entries');
}
Buka http://localhost/ci/index.php/blog/db_manage (tidak bisa menggunakan http://localhost/ci/db_manage) dan Anda sudah bisa mengelola dari web browser. Masukkanlah 2-3 data untuk bisa ditampilkan di web browser dengan script yang akan kita buat nantinya. Setelah memasukkan data, jangan lupa menghapus baris $this->load->scaffolding('entries'); di file blog.php untuk mematikan fasilitas scaffolding.
Mengelola Database
Selanjutnya kita akan mengambil data dari database. Ubahlah function index() yang ada di file blog.php menjadi seperti berikut:
function index() {
$data['title'] = "My Blog Title";
$data['heading'] = "My Blog Heading";
$data['query'] = $this->db->get('entries');
$this->load->view(‘blog_view’, $data);
}
Baris baru tersebut digunakan untuk mengambil data dari tabel bernama entries. Selanjutnya buka file blog_view.php untuk menampilkan data.
<h1><?=$heading?></h1>
<?php foreach ($query->result() as $row): ?>
<h3><?=$row->title?></h3>
<p><?=$row->body?></p>
<hr />
<?php endforeach; ?>
Kode-kode baru di atas digunakan untuk menampilkan data di browser. Silakan masuk ke http://localhost/ci/ dan lihatlah hasilnya.
Helper
Helper merupakan kumpulan function yang sudah dibuat oleh para programmer CI untuk memudahkan pekerjaan kita. Helper terdapat dalam file-file di dalam folder system/helpers (perhatikan, bukan system/application/helpers) dan di belakang nama file tersebut diberi akhiran _helper.php. Misalnya function untuk array ada di array_helper.php. Dalam tutorial ini kita akan menggunakan url_helper dan form_helper sebagai fasilitas untuk memasukkan komentar pada blog.
Aktifkan url_helper dan form_helper dengan mengubah isi constructur Blog() di file blog.php seperti berikut:
function Blog() {
parent::Controller();
$this->load->helper('url');
$this->load->helper('form');
}
Selanjutnya, ubah file blog_view.php
<?php foreach ($query->result() as $row): ?>
<h3><?=$row->title?></h3>
<p><?=$row->body?></p>
<p><?=anchor('blog/comments', 'Comments');?></p>
<hr />
<?php endforeach; ?>
Function anchor('blog/comments', 'Comments'); mirip seperti <a href=’blog/comments’>Comments</a>. Alamat ini nantinya akan menuju ke http://localhost/ci/index.php/blog/comments. Perhatikan penjelasan di awal mengenai controller, maka berarti comments di sana merupakan function yang nantinya akan kita buat pada file blog.php.
Selanjutnya buka halaman http://localhost/ci/ untuk menampilkan link Comments. Saat di-klik, link ini akan menghasilkan Error 404 karena halaman yang dimaksud memang belum ada. Namun hal ini menunjukkan kalau url helper sudah berjalan.
Ubah kembali baris <p><?=anchor('blog/comments/'.$row->id, 'Comments');?></p> pada file blog_view.php menjadi seperti berikut:
<p><?=anchor('blog/comments/'.$row->id, 'Comments');?></p>
Buka halaman http://localhost/ci/, dan jika Anda klik link Comments, Anda akan melihat menuju link seperti http://localhost/ci/index.php/blog/comments/1, di mana angka 1 merupakan id dari entry blog yang sudah kita buat.
Selanjutnya tambahkan function comments di file blog.php seperti berikut ini:
<?php
class Blog extends Controller {
function Blog() {
parent::Controller();
$this->load->helper('url');
$this->load->helper('form');
}
function index() {
$data['title'] = "My Blog Title";
$data['heading'] = "My Blog Heading";
$data['query'] = $this->db->get('entries');
$this->load->view('blog_view', $data);
}
function comments() {
echo "testing..";
}
}
?>
Buka halaman http://localhost/ci/ dan masuklah ke salah satu link Comments yang ada. Jika Anda menjumpai teks testing… di browser, berarti script sudah berjalan dengan baik. Namun perlu diingat, bahwa controller comments di sini belum dihubungkan dengan file view, sehingga kita tidak bisa menampilkan fomat HTML yang baik. Oleh karena itu, seperti yang kita lakukan pada index controller, kita akan menghubungkan controller comments ini ke file view, yaitu comment_view.php
Ubahlah file blog.php, sehingga di dalam function comments() menjadi seperti berikut:
function comments() {
$data['title'] = "My Comment Title";
$data['heading'] = "My Comment Heading";
$this->load->view('comment_view', $data);
}
Buatlah file comment_view.php pada folder system/application/views dan masukkan kode berikut:
<html>
<head>
<title><?=$title?></title>
</head>
<body>
<h1><?=$heading?></h1>
</body>
</html>
Buka halaman http://localhost/ci/ dan masuklah ke salah satu link Comments yang ada. Seharusnya Anda akan mendapatkan halaman My Comment yang baru.
Pembuatan Form Komentar
Untuk memberikan komentar, kita akan menggunakan satu tabel baru yang diberi nama comments. Query-nya adalah sebagai berikut:
DROP TABLE IF EXISTS `comments`;
CREATE TABLE IF NOT EXISTS `comments` (
`id` int(11) unsigned NOT NULL auto_increment,
`entry_id` int(11) unsigned default '0',
`body` text,
`author` varchar(100) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Di sini kita akan menggunakan form helper untuk membuat suatu form, yaitu form untuk memasukkan komentar. Ketikkanlah baris-baris kode di bawah ini di file comment_view.php
<body>
<h1><?=$heading?></h1>
<?=form_open('blog/comment_insert');?>
<?=form_hidden('entry_id', $this->uri->segment(3));?>
<p><textarea name="body" rows="10"></textarea></p>
<p><input type="text" name="author" /></p>
<p><input type="submit" value="Submit Comment" /></p>
</form>
</body>
Keterangan kode tersebut adalah sebagai berikut:
- <?=form_open('blog/comment_insert');?> berfungsi untuk awal form. Adapun parameter pertama adalah tujuan (action) form.
- <?=form_hidden('entry_id', $this->uri->segment(3));?> berfungsi untuk menampilkan hiiden input bernama entry id dengan value adalah segment ketiga dari URI http://localhost/ci/index.php/blog/comments/1. Segment pertama adalah blog, segment kedua adalah comments, dan segment ketiga adalah angka 1.
Bukalah halaman http://localhost/ci/, masuk ke salah satu link Comments, dan klik Submit Comment. Hasilnya memang Error 404, karena memang halaman tujuan untuk memasukkan data belum ada. Namun perhatikan URL tujuan, sudah menjadi http://localhost/ci/index.php/blog/comment_insert. Ini berarti <?=form_open('blog/comment_insert');?> bekerja dengan baik. Tentu saja, untuk memastikan, Anda bisa melihat kode HTML yang dihasilkan dengan melihatnya dari View -> Source.
Memasukkan Komentar
Untuk memasukkan komentar, buatlah function comment_insert() di dalam file blog.php yang isinya sebagai berikut:
function comment_insert() {
$this->db->insert('comments', $_POST);
redirect('blog/comments/'.$_POST['entry_id']);
}
Berikut penjelasan dari function di atas:
- $this->db->insert('comments', $_POST); digunakan untuk memasukkan data dari form ke database. Parameter pertama merupakan nama database, sedangkan parameter kedua merupakan variabel yang digunakan untuk mengirim data. Perlu diingat bahwa key dari variabel $_POST ini haruslah sama dengan nama-nama field pada tabel.
- redirect('blog/comments/'.$_POST['entry_id']); digunakan untuk redirect halaman ke halaman yang dimaksud.
Sekarang bukalah http://localhost/ci/index.php/blog/comments/1 untuk mulai memasukkan komentar. Masukkan komentar dan nama pengirim di sana, dan klik Submit Comment. Jika tidak ada pesan error, seharusnya script sudah berjalan dengan baik. Belum ada data yang ditampilkan karena kita memang belum menampilkan data yang dikirimkan.
Menampilkan Komentar
Untuk menampilkan komentar, ubahlah function comments() yang ada di file blog.php
function comments() {
$data['title'] = "My Comment Title";
$data['heading'] = "My Comment Heading";
$this->db->where('entry_id', $this->uri->segment(3));
$data['query'] = $this->db->get('comments');
$this->load->view('comment_view', $data);
}
Di antara dua baris yang baru ditambahkan tersebut, baris yang kedua mirip dengan yang ada pada function index(). Perbedaannya hanya pada nama database yang diambil, yaitu comments. Namun karena kita hanya memerlukan komentar untuk entry_id yang bernilai tertentu (tergantung nomor blog yang diberikan komentar), maka kita memerlukan baris di atasnya, yaitu $this->db->where('entry_id', $this->uri->segment(3));. Baris tersebut mem-filter SELECT dengan nilai entry_id tertentu.
Selanjutnya ubahlah file blog_view.php dengan menambah data yang ingin ditampilkan.
<h1><?=$heading?></h1>
<?php if ($query->num_rows() > 0): ?>
<?php foreach($query->result() as $row): ?>
<p><?=$row->body?></p>
<p><?=$row->author?></p>
<hr />
<?php endforeach; ?>
<?php endif; ?>
<p><?=anchor('blog', 'Back to Blog');?></p>
<?=form_open('blog/comment_insert');?>
Kode di atas sudah pernah diterangkan sebelumnya saat menampilkan daftar blog sehingga tidak akan saya terangkan lagi di sini. Bukalah halaman http://localhost/ci/index.php/blog/comments/1 dan masukkan komentar baru. Anda akan melihat data baru ditampilkan. Untuk mengisi komentar di entry blog yang lain, klik Back to Blog dan klik Comments di blog yang lain.
|