Pada artikel sebelumnya kita sudah mempelajari bagaimana menggunakan Controller dan View pada NG Framework. Kita juga sudah membuat sebuah form untuk halaman Kontak. Pada artikel kali ini akan kita pelajari bagaimana menyimpan informasi yang dikirim dari form pada halaman Kontak untuk disimpan ke dalam basis data (database).
Mari kita buat database-nya lebih dulu serta membuat tabel yang dibutuhkan.
Nama database: dbng
Nama tabel: tblkontak
CREATE TABLE `tblkontak` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `nama` varchar(50) NOT NULL, `email` varchar(100) NOT NULL, `pesan` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Setelah pembuatan database, atur konfigurasi koneksi database ke NG Framework melalui berkas database.ini di \apps\Config.
[section] dbtype = 'mysql'; port = 3306; host = 'localhost'; dbname = 'dbng'; username = 'root'; password = 'password'; charset = 'utf8';
Kita akan membuat sebuah Model untuk mengelola tabel tblkontak pada database. Lokasi penyimpanan Model berada di \apps\Model. Buatlah sebuah berkas baru dengan nama Kontak.php.

Berikut ini kode sumber untuk berkas Kontak.php
<?php class Kontak{ protected $config; protected $session; protected $database; protected $query; protected $table; public function __construct() { $this->session = new \NG\Session; $this->config = \NG\Registry::get('config'); $this->database = \NG\Registry::get('database'); $this->query = new \NG\Query(); $this->table = 'tblkontak'; } public function insertKontak($data){ $database = $this->database; $query = $this->query; $table = $this->table; $sql = $query->insert($table, $data); $result = $database->query($sql); return $result; } public function deleteKontak($id){ $database = $this->database; $query = $this->query; $table = $this->table; $sql = $query->delete()->from($table)->where("id = ?", $id); /* OR: $sql = $query->delete()->from($table)->where("id = $id"); */ $result = $database->query($sql); return $result; } public function fetchKontak(){ $database = $this->database; $query = $this->query; $table = $this->table; $sql = $query->select()->from($table); $result = $database->fetchAll($sql); return $result; } } ?>
Selanjutnya kita ubah View untuk route halaman, yaitu berkas Index.phtml di \apps\View\Page.
<?php $viewType = isset($this->viewType) ? $this->viewType : ''; $viewTitle = isset($this->viewTitle) ? $this->viewTitle : ''; $viewContent = isset($this->viewContent) ? $this->viewContent : ''; ?> <h1><?php echo $viewTitle ?></h1> <div class="content"> <?php /* Menyeleksi kondisi berdasarkan $viewType */ if ($viewType == 'tentang'){ echo $viewContent; } else if ($viewType == 'kontak'){ ?> <form method="POST"> <table class="table"> <tr> <td width="180">Nama Lengkap</td> <td width="30">:</td> <td><input class="form-control" type="text" name="fullname" placeholder="Nama Lengkap" /></td> </tr> <tr> <td>Email</td> <td width="30">:</td> <td><input class="form-control" type="email" name="email" placeholder="Email" /></td> </tr> <tr> <td>Pesan</td> <td width="30">:</td> <td><textarea class="form-control" rows="2" name="message" placeholder="Pesan"></textarea></td> </tr> <tr> <td colspan="3" class="text-center"><input type="submit" class="btn btn-primary" name="send" value="Kirim" /></td> </tr> </table> </form> <?php /* Mengambil nilai $viewData */ $viewData = isset($this->viewData) ? $this->viewData : null; if ($viewData){ /* Menampilkan isi dari tabel tblkontak pada View */ ?> <table class="table table-striped"> <thead> <tr> <th>ID</th> <th>Nama</th> <th>Email</th> <th>Pesan</th> <th>Aksi</th> </tr> </thead> <tbody> <?php foreach ($viewData as $item){ ?> <tr> <td><?php echo $item['id'] ?></td> <td><?php echo $item['nama'] ?></td> <td><?php echo $item['email'] ?></td> <td><?php echo $item['pesan'] ?></td> <td> <form method="POST" id="form-delete-<?php echo $item['id'] ?>"> <input type="submit" class="btn btn-danger" id="delete-<?php echo $item['id'] ?>" name="delete-<?php echo $item['id'] ?>" value="Hapus" /> </form> </td> </tr> <?php } ?> </tbody> </table> <?php } ?> <?php } else { ?> <?php } ?> </div>
Terakhir, kita ubah Controller untuk route halaman, yaitu berkas PageController.php di \apps\Controller untuk menangkap dan mengelola informasi yang dikirimkan melalui form.
<?php class PageController extends NG\Controller { protected $config; protected $cache; protected $session; protected $cookie; protected $database; protected $kontak; public function init() { $this->config = $this->view->config = \NG\Registry::get('config'); $this->session = $this->view->session = new \NG\Session(); $this->cookie = $this->view->cookie = new \NG\Cookie(); $this->cache = $this->view->cache = new \NG\Cache(); $this->database = $this->view->database = \NG\Registry::get('database'); $this->kontak = $this->view->kontak = new Kontak(); } public function IndexAction() { $config = $this->config; $database = $this->database; $kontak = $this->kontak; /* $requests mengambil URL yang dikirimkan peramban, misal: - http://localhost/ng-bootstrap/halaman/tentang maka $requests akan menghasilan array dengan nilai: param1 => tentang. */ $requests = \NG\Route::getRequests(); $viewRoute = $config['ROUTE_PATH_1']; $siteName = $config['SITE_NAME']; $viewType = ''; $viewTitle = ''; $viewContent = ''; $viewKeywords = ''; $viewDescription = ''; $param1 = ''; if ($requests){ if (isset($requests['param1'])){ $param1 = $requests['param1']; if ($param1){ switch($param1){ case 'tentang': $viewTitle = 'Tentang'; $viewContent = "<p><strong>$siteName</strong> adalah situs percobaan NG Framework dengan Bootstrap. Terima kasih sudah mengunjungi <strong>$siteName</strong>.</p>"; $viewKeywords = 'Tentang, NG Framework, Bootstrap'; $viewDescription = $viewContent; break; case 'kontak': $viewTitle = 'Kontak'; $viewKeywords = 'Kontak'; $viewDescription = "Halaman kontak $siteName"; /* Bila ada data dikirimkan via form */ if (isset($_POST)){ /* Bila data dikirimkan dari tombol send [Kirim] */ if (isset($_POST["send"])){ $fullname = isset($_POST["fullname"]) ? $_POST["fullname"] : ''; $email = isset($_POST["email"]) ? $_POST["email"] : ''; $message = isset($_POST["message"]) ? $_POST["message"] : ''; if ($fullname && $email && $message){ $dataInsert = array( 'nama' => $fullname, 'email' => $email, 'pesan' => $message ); $insert = $kontak->insertKontak($dataInsert); } } else { foreach ($_POST as $key => $value){ /* Bila pada data terdapat kunci 'delete' */ if (substr($key, 0, 6) == 'delete'){ $arrKey = explode('-', $key); $messageId = 0; if (count($arrKey) == 2){ $messageId = $arrKey[1]; $delete = $kontak->deleteKontak($messageId); } break; } } } } /* Mengirimkan data kontak */ $viewData = $kontak->fetchKontak(); /* Mengirimkan data kontak ke View via variabel viewData */ $this->view->viewData = $viewData; break; } } } } $viewType = $param1; $viewDescription = htmlentities(strip_tags($viewDescription)); $this->view->viewRoute = $viewRoute; $this->view->viewType = $viewType; $this->view->viewTitle = $viewTitle; $this->view->viewContent = $viewContent; $this->view->viewKeywords = $viewKeywords; $this->view->viewDescription = $viewDescription; $this->view->viewImage = ''; } } ?>
Sekarang, mari kita coba, buka http://localhost/ng-bootstrap/halaman/kontak, isi form, kemudian klik tombol Kirim.

Bila pengisian berhasil, maka informasi yang dikirimkan akan ditampilkan pada sebuah tabel pada halaman Kontak.

Silakan mencoba untuk menambahkan beberapa kiriman informasi kontak. Silakan mencoba pula untuk menghapus satu atau dua informasi pada tabel yang ditampilkan.