PHP Datatables Serverside
Oke langsung saja, Pertama kita siapkan file library jquery, datatables, dan bootstrap dari CDN.
001 002 003 004 005 006 007 008 | <!-- CSS --> < link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css" > <!-- Javascript --> |
selanjutnya kita membuat file index.php sebagai tampilan utama.
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 | <! DOCTYPE html> < html > < head > <!-- Bootstrap CSS --> < link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css" > < title >Kontak</ title > </ head > < body > < div class = "container mt-5 mb-5" > < div class = "row" > < div class = "col-12" > < h1 >Data Kontak</ h1 > </ div > </ div > < hr > < div class = "row" > < div class = "col-12" > < div class = "table-responsive" > < table class = "table table-striped table-sm" > < thead > < tr > < th scope = "col" >No</ th > < th scope = "col" >Nama</ th > < th scope = "col" >Nomor HP</ th > < th scope = "col" >Aksi</ th > </ tr > </ thead > < tbody > <!-- List Data Menggunakan DataTable --> </ tbody > </ table > </ div > </ div > </ div > < hr > </ div > < script > $(function(){ $('.table').DataTable({ "processing": true, "serverSide": true, "ajax":{ "url": "ajax/ajax_kontak.php?action=table_data", "dataType": "json", "type": "POST" }, "columns": [ { "data": "no" }, { "data": "nama" }, { "data": "no_hp" }, { "data": "aksi" }, ] }); }); </ script > </ body > </ html > |
selanjutnya kita membuat file koneksi.php sebagai koneksi ke database.
001 002 003 004 005 006 007 008 009 010 011 | <?php // Membuat variabel, ubah sesuai dengan nama host dan database pada hosting $host = "localhost" ; $user = "root" ; $pass = "" ; $db = "db_kontak" ; //Menggunakan objek mysqli untuk membuat koneksi dan menyimpan nya dalam variabel $mysqli $mysqli = new mysqli( $host , $user , $pass , $db ); ?> |
selanjutnya kita membuat file ajax_kontak.php sebagai pemrosesan data sisi server.
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 | <?php require_once '../koneksi.php' ; if ( $_GET [ 'action' ] == "table_data" ){ $columns = array ( 0 => 'id' , 1 => 'nama' , 2=> 'no_hp' , 3=> 'id' , ); $querycount = $mysqli ->query( "SELECT count(id) as jumlah FROM tbl_kontak" ); $datacount = $querycount ->fetch_array(); $totalData = $datacount [ 'jumlah' ]; $totalFiltered = $totalData ; $limit = $_POST [ 'length' ]; $start = $_POST [ 'start' ]; $order = $columns [ $_POST [ 'order' ][ '0' ][ 'column' ]]; $dir = $_POST [ 'order' ][ '0' ][ 'dir' ]; if ( empty ( $_POST [ 'search' ][ 'value' ])) { $query = $mysqli ->query("SELECT id,nama,no_hp FROM tbl_kontak order by $order $dir LIMIT $limit OFFSET $start "); } else { $search = $_POST [ 'search' ][ 'value' ]; $query = $mysqli ->query("SELECT id,nama,no_hp FROM tbl_kontak WHERE nama LIKE '%$search%' or no_hp LIKE '%$search%' order by $order $dir LIMIT $limit OFFSET $start "); $querycount = $mysqli ->query("SELECT count (id) as jumlah FROM tbl_kontak WHERE nama LIKE '%$search%' or no_hp LIKE '%$search%' "); $datacount = $querycount ->fetch_array(); $totalFiltered = $datacount [ 'jumlah' ]; } $data = array (); if (! empty ( $query )) { $no = $start + 1; while ( $r = $query ->fetch_array()) { $nestedData [ 'no' ] = $no ; $nestedData [ 'nama' ] = $r [ 'nama' ]; $nestedData [ 'no_hp' ] = $r [ 'no_hp' ]; $nestedData [ 'aksi' ] = "<a href='#' class='btn-warning btn-sm'>Ubah</a> <a href='#' class='btn-danger btn-sm'>Hapus</a>" ; $data [] = $nestedData ; $no ++; } } $json_data = array ( "draw" => intval ( $_POST [ 'draw' ]), "recordsTotal" => intval ( $totalData ), "recordsFiltered" => intval ( $totalFiltered ), "data" => $data ); echo json_encode( $json_data ); } ?> |
Dalam pemrosesan sisi server membutuhkan 6 POST request dari datatables:
- $_POST[‘length’] : jumlah baris yang ditampilkan.
- $_POST[‘start’] : index untuk awal data, baris pertama dimulai dari index 0.
- $_POST[‘order’][‘0’][‘column’] : pengurutan berdasarkan kolom yang dipilih.
- $_POST[‘order’][‘0’][‘dir’] : pengurutan secara ascending atau descending.
- $_POST[‘search’][‘value’] : data pencarian.
- $_POST[‘draw’] : Ini digunakan oleh DataTables untuk memastikan bahwa Ajax kembali dari permintaan pemrosesan sisi server. biasanya menggunakan nilai int, seperti 1 yang artinya mengembalikan permintaan.
Berikut Contoh Hasilnya:
Sumber: https://belajaraplikasi.com/membuat-datatables-server-side-processing-dengan-php-mysql/