Menggunakan Pustaka Database pada NG Framework

Bagikan jika Anda sukai postingan ini!

Logo database MariaDB

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.

Lokasi Model pada NG Framework
Lokasi Model pada NG Framework

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.

Mengisi form pada halaman Kontak
Mengisi form pada halaman Kontak

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

Informasi pesan kontak pada tabel
Informasi pesan kontak pada tabel

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