PHP CRUD PDO dengan URL Router (Simple Framework)

 Author : hadinug, 27 May, 2014, Komentar

PDO CRUD


Mungkin anda merasa agak sulit untuk di pahamai kalau melihat dai judul. Dari judul tersebut terdapat beberapa point pembelajaran yang akan kita coba bedah ditutorial ini. Jika kita lihat sekilas dari judul kita akan belajar sedikti PHP PDO, belajar PHP URL Router, tapi tenang saja ini tidaklah sulit, hanya butuh waktu dan keinginan untuk belajar dan ingin tau, saya yakin ada bisa melahap tutorial ini dengan baik.



Tutorial ini sejatinya merupakan request dari pembaca website hadinug.net, yang meminta kami untuk menuliskan tutorial tentang CRUD dengan PDO.



Sebelumnya kami harap, anda untuk membaca sedikti referensi dari kami tentang PHP PDO dan URL Router sebagai dasar pengetahuan untuk melanjutkan tutorial ini.


Database

Database untuk aplikasi php OOP Crud ini sangat simple, kami hanya mencoba mensimulasi contoh sederhana agar anda bisa mengembangkan dengan cara anda sendiri

Buat database dengan nama pdocrud  kemudian masukan query berikut:

USE `pdocrud`;
 

CREATE TABLE `tbl_user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) DEFAULT NULL,
  `password` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

/*Data for the table `tbl_user` */

insert  into `tbl_user`(`id`,`username`,`password`) values (1,'admin','21232f297a57a5a743894a0e4a801fc3'),(2,'user','6ad14ba9986e3615423dfca256d04e3f');


Note: pada tutorial ini, kami hanya menggunakan 1 tabel saja (tbl_user) yang nantinya akan kita manipulasi ubah dalam tampilan CRUD pada aplikasi.

Login

Aplikasi login terdapat pada folder project app dan pada file php login.php. Pada class php login ini terdapat dua bauh metode atau fungsi index dan logout.
index
  public function index() {
        // jika belum login redirect ke halaman login
        if (is_login()) {
            redirect('admin');
        } else {
            if ($this->request->post('emitter') == '1') {
                $remember = filter_var($this->request->post('remember')); // remember
                $username = filter_var($this->request->post('username'));
                $password = md5(filter_var($this->request->post('password')));

                if ($remember) {
                    $data['re'] = array(
                        'rpassword' => filter_var($this->request->post('password')),
                        'rusername' => $username
                    );
                    $this->session->set_data($data['re']);
                    $data['remember'] = $remember;
                } 
                $prepare = $this->db->prepare("SELECT * FROM tbl_user WHERE `username`=:username AND `password`=:password");
                $prepare->bindValue(':username', $username);
                $prepare->bindValue(':password', $password);
                $prepare->execute();
                if ($prepare->rowCount() > 0) {
                    $this->session->set_data(array(
                        'login' => TRUE,
                        'username' => $username
                    ));
                    redirect('admin');
                } else {
                    $data['message'] = 'Username atau password salah!';
                }
            }

            $data['title'] = 'Login';
            $this->__view('login', $data);
        }
    }
Metode ini digunakan untuk mengecek user yang berhak login, dimana informasi login kita ambil dari database. Beberapa catatan yang harus anda perhatikan:
  • is_login, merupakan fungsi yang digunakan untuk mengecek apakah user sudah login atau belum
  • redirect, merupakan fungsi yang digunakan untuk mengalihkan halaman saat ini
  • $this->session->set_data(array), merupakan cara untuk menyimpan informasi session pengguna dalam bentuk cookie
  • $this->session->get_data(nama_session), merupakan cara untuk mendapatkan nilai session

Logout
public function logout() {
        $this->session->destroyed(); // hapus session
        redirect('login');
    }

Metode ini digunakan untuk menghapus semua session atau cookie pengguna yang sedang online. Setelah login berhasil kita masuk ke aplikasi CRUD untuk memanipulasi data pengguna.

Pengguna

Lihat pada class pengguna dalam folder app/ kode yang ditulis didalamnya. Mari kita mulai bedah beberapa hal.

Index
Fungsi ini digunakan untuk menampilkan informasi data user atau pengguna dari tabel tbl_user dalam bentuk tabel html sederhana
public function index($offset = null) {
// jika belum login redirect ke halaman login
        if (!is_login()) {
            redirect('login');
        } else {

            $this->__library(array('pagination'));
// define properties
            $limit = ($this->session->get_data('limit')) ? $this->session->get_data('limit') : $this->limit;
            $view['offset'] = ($offset == null) ? 0 : $offset;
// define properties from query
            $prepare = $this->db->prepare("SELECT * FROM tbl_user LIMIT $view[offset],$limit");
            $prepare->execute();
            $view['rs'] = $prepare->fetchAll();
            $sqlNum = $this->db->query("SELECT * FROM tbl_user");
            $num = $sqlNum->rowCount();
            $view['total'] = $num;

// dropdown option
            $view['opt_limit'] = array();
            for ($i = 5; $i < 30; $i++) {
                if ($i % 5 == 0) {
                    $view['opt_limit'][$i] = $i;
                }
            }

            // form
            $form['generate_kode'] = $this->generate_kode();
            $form['action'] = 'pengguna/create';
            $view['form'] = $form;



// define properties pagination
            $config['base_url'] = site_url('pengguna/index');
            $config['total_rows'] = $view['total'];
            $config['per_page'] = $limit;
            $config['uri_segment'] = $view['offset'];
            $this->pagination->initialize($config);
            $view['paging'] = $this->pagination->general_links();
            $view['title'] = 'pengguna';
            $view['container'] = 'pengguna/index';
            $this->__view('index', $view);
        }
    }

Ada beberapa hal yang harus anda perhatikan disini:
  • fungsi / metode ini meload class pagination dengan cara $this->__library(array(nama_class));
  • data dalam bentuk array $view akan di parsing dan dilempar ke halaman view, views/pengguna/index.php (lihat $view['container']='pengguna/index')

Create
Digunakan untuk menambahkan data user melalui form ke database
public function create() {
        if (is_login()) {
            if ($this->request->post('emitter') == '1') {
                $username = $this->request->post('username');
                $password = md5($this->request->post('password'));
                $std = $this->db->prepare("INSERT into tbl_user (username,password) VALUES(:username,:password)");
                $std->bindValue(':username', $username);
                $std->bindValue(':password', $password);
                $std->execute();
                redirect('pengguna');
            }
        }
    }

Update
Pada metode update kita gunakan conditional, dengan menambahkan parameter emitter sebagai acuan, jika emitter exist atau bernialai 1 maka kode untuk mengubah data user database di jalankan, jika tidak akan tampilakn informasi user dalam bentuk form inputan
public function update($id = null, $offset = null) {
        if (is_login() && $id != null) {
            if ($this->request->post('emitter') == '1') {
                $username = $this->request->post('username');
                $password = md5($this->request->post('password'));
                $std = $this->db->prepare("UPDATE tbl_user SET `username`=:username, `password`=:password WHERE `id`=:id");
                $std->bindValue(':username', $username);
                $std->bindValue(':password', $password);
                $std->bindValue(':id',$id);
                $std->execute();
                redirect('pengguna');
            } else {
                $std = $this->db->prepare("SELECT * FROM tbl_user WHERE id=:id");
                $std->bindValue(':id', $id);
                $std->execute();
                $row = $std->fetch();

                $this->__library(array('pagination'));
// define properties
                $limit = ($this->session->get_data('limit')) ? $this->session->get_data('limit') : $this->limit;
                $view['offset'] = ($offset == null) ? 0 : $offset;
// define properties from query
                $prepare = $this->db->prepare("SELECT * FROM tbl_user LIMIT $view[offset],$limit");
                $prepare->execute();
                $view['rs'] = $prepare->fetchAll();
                $sqlNum = $this->db->query("SELECT * FROM tbl_user");
                $num = $sqlNum->rowCount();
                $view['total'] = $num;

// dropdown option
                $view['opt_limit'] = array();
                for ($i = 5; $i < 30; $i++) {
                    if ($i % 5 == 0) {
                        $view['opt_limit'][$i] = $i;
                    }
                }

                // form 
                $form['action'] = 'pengguna/update/' . $id;
                $form['id'] = $row['id'];
                $form['username'] = $row['username'];
                $view['form'] = $form;



// define properties pagination
                $config['base_url'] = site_url('pengguna/index');
                $config['total_rows'] = $view['total'];
                $config['per_page'] = $limit;
                $config['uri_segment'] = $view['offset'];
                $this->pagination->initialize($config);
                $view['paging'] = $this->pagination->general_links();
                $view['title'] = 'pengguna';
                $view['container'] = 'pengguna/index';
                $this->__view('index', $view);
            }
        }
    }

Delete
Dan pada bagian terkahir atau metode terakhir adalah delete, kita akan menghapus data user berdasarkan id yang dikirimkan
public function delete($id = null) {
        if (is_login() && $id != null) {
            $std = $this->db->prepare("DELETE FROM tbl_user WHERE id=:id") or die(mysql_error());
            $std->bindValue(':id', $id);
            $std->execute();
            redirect('pengguna');
        }
    }

Kesimpulan

  • Aplikasi CRUD PDO ini menggunakan library class router yang sebelunya juga telah kami tulis, kemudian dengan sedikit modifikasi jadilah sebuah framework CRUD sederhana.
  • Anda bisa membuat sebuah modul baru dengan mempelajari modul pengguna terlebih dahulu, ini sangat mudah dan kami yakain anda bisa membuat modul-modul lainnya dengan cara yang sama seperti yang kami tunjukan.

Untuk melihat demonstrasi aplikasinya login dengan(username:admin & password:admin), dan untuk mendownload silahkan kunjungi halaman ini. Atur nilai base path dan configurasi database di file index.php

define('base_url', '/crud/'); // basepath
// database conf
define('db_server', 'localhost'); 
define('db_user', 'root'); 
define('db_pass', ''); 
 
Bagikan halaman ke sosial media
 
Tags :   php    phpCRUD    phpPDO       

Tentang Penulis

writer hadinug
Web Developer di PT. Yafii Solusi Internasional

Link: http://ysi.co.id

   Komentar Anda