Membuat Dinamik Data Pada DataTables, Bootstrap + CRUD

117 comments

Mempunyai Data sampe Ribuan atau Puluhan Ribu Baris ?
pasti akan berat ketika akses page data tersebut, mungkin ketika di akses data ter-load semua dan itu akan menguras bandwith hosting/server anda :(
bahkan bisa membuat browser anda not responding :v

A : Bagaimana caranya ketika di akses data anda yang sangat banyak itu tidak berat  ?
     apakah ada triknya ?

B : Ada donk Triknya, yuk simak :)



*Yang Dibutuhkan

  • Komputer/Laptop pasti itu mah :)
  • XAMPP / WAMPP.
  • Notepad ++ / Sublime / Dreamweaver.
  • Script Data Tables bisa di download disini.
  • Script Bootstrap bisa di download disini (Klik download yang pojok kiri ya)


Yuk kita mulai :D

1. Download script Data Tables, dan Bootstrap terlebih dahulu.

2. Nyalakan XAMPP, perlu di ketahui penulis memakai XAMPP versi V 1.8
    PHP menggunakan versi 5.4. XAMPP bisa di download disini

3. Setelah di download script Data Tables, buat 1 folder "datatablesku" lalu buat 1 folder lagi
    yaitu "assets" lalu extract file script Data Tables yang sudah di download, lalu masukin
    isi script tersebut kedalam folder "assets" kira kira seperti ini :)

 

4.  Setelah di download script Bootsrap, buka folder "assets" buat folder "bootsrap"
     lalu extract file script Bootsrap yang sudah di download, lalu masukin isi script tersebut
     kedalam folder "bootsrap" kira kira seperti ini :)


5. Buka PhpMyAdmin, buat database baru dengan nama "datatables_ku" setelah itu
    buka link ini lalu klik menu SQL, copy dan paste script pada link yang saya berikan
    di text box SQL. Lalu klik kirim.



WARNING !!!
Tahap selanjutnya akan membahas tentang coding, pastikan pikiran sedang fresh, tidak banyak pikiran dll. Pastikan anda mengerti kodingan yang akan di bahas, jangan hanya copas lalu anda tidak mengerti inti dari coding yang di bahas, jika ada yang kurang/tidak mengerti atau penulis melakukan kesalahan. Silahkan komentar  :)

6. Pada folder "datatables_ku" buat file bernama "index.php" dengan script sebagai berikut
 


<HTML>
 <HEAD>
  
  <!-- JQUERY -->
  <script type="text/javascript" language="javascript" src="assets/media/js/jquery.js"></script>
  
  <!-- BOOTSTRAP -->
  <!-- Latest compiled and minified CSS -->
  <link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
  
  <!-- Optional theme -->
  <link rel="stylesheet" href="assets/bootstrap/css/bootstrap-theme.min.css">
  
  <!-- Latest compiled and minified JavaScript -->
  <script src="assets/bootstrap/js/bootstrap.min.js"></script>
  
  <!-- DataTables -->
  <link rel="stylesheet" type="text/css" href="assets/media/css/dataTables.bootstrap.css">
  <link rel="stylesheet" type="text/css" href="assets/media/css/dataTables.responsive.css">
  <script type="text/javascript" language="javascript" src="assets/media/js/jquery.dataTables.js"></script>
  <script type="text/javascript" language="javascript" src="assets/media/js/dataTables.responsive.js"></script>
  <script type="text/javascript" language="javascript" src="assets/media/js/dataTables.bootstrap.js"></script>
  <script type="text/javascript" language="javascript" src="assets/media/js/common.js"></script>
  <script type="text/javascript" language="javascript" >
   
   var dTable;
   // #Example adalah id pada table
   $(document).ready(function() {
    dTable = $('#example').DataTable( {
     "bProcessing": true,
     "bServerSide": true,
     "bJQueryUI": false,
     "responsive": true,
     "sAjaxSource": "serverSide.php", // Load Data
     "sServerMethod": "POST",
     "columnDefs": [
     { "orderable": false, "targets": 0, "searchable": false },
     { "orderable": true, "targets": 1, "searchable": true },
     { "orderable": true, "targets": 2, "searchable": true },
     { "orderable": true, "targets": 3, "searchable": true },
     { "orderable": true, "targets": 4, "searchable": true }
     ]
    } );
    
    $('#example').removeClass( 'display' ).addClass('table table-striped table-bordered');
    $('#example tfoot th').each( function () {
     
     //Agar kolom Action Tidak Ada Tombol Pencarian
     if( $(this).text() != "Action" ){
      var title = $('#example thead th').eq( $(this).index() ).text();
      $(this).html( '<input type="text" placeholder="Search '+title+'" class="form-control" />' );
     }
    } );
    
    // Untuk Pencarian, di kolom paling bawah
    dTable.columns().every( function () {
     var that = this;
     
     $( 'input', this.footer() ).on( 'keyup change', function () {
      that
      .search( this.value )
      .draw();
     } );
    } );
   } );
   
   
  </script>
 </HEAD>
 <BODY>
  <div class="container-fluid">
   <div class="row">
    <div class="col-md-12">
     <button onClick="showModals()" class="btn btn-primary">Tambah Data</button>
     <br>
     <hr>
     <br>
     <table id="example"  cellpadding="0" cellspacing="0" border="0" class="display" width="100%">
      <thead>
       <tr>
        <th>Action</th>
        <th>Userid</th>
        <th>Real Name</th>
        <th>NPM</th>
        <th>KELAS</th>
       </tr>
      </thead>
      <tbody>
      </tbody>
      <tfoot>
       <th>Action</th>
       <th>Userid</th>
       <th>Real Name</th>
       <th>NPM</th>
       <th>KELAS</th>
      </tfoot>
     </table>
    </div>
   </div>
  </div>
  
  <!-- Modal Popup -->
  <div class="modal fade" id="myModals" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
   <div class="modal-dialog">
    <div class="modal-content">
     <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
      <h4 class="modal-title" id="myModalLabel">Add User</h4>
     </div>
     <div class="modal-body">
      
      <div class="alert alert-danger" role="alert" id="removeWarning">
       <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
       <span class="sr-only">Error:</span>
       Anda yakin ingin menghapus user ini
      </div>
      <br>
      <form class="form-horizontal" id="formUser">
       
       <input type="hidden" class="form-control" id="id" name="id">
       <input type="hidden" class="form-control" id="userid" name="userid">
       <input type="hidden" class="form-control" id="type" name="type">
       
       <div class="form-group">
        <label for="real_name" class="col-sm-2 control-label">Nama User</label>
        <div class="col-sm-10">
         <input type="text" class="form-control" id="real_name" name="real_name" >
        </div>
       </div>
       <div class="form-group">
        <label for="npm" class="col-sm-2 control-label">NPM</label>
        <div class="col-sm-10">
         <input type="text" class="form-control" id="npm" name="npm" >
        </div>
       </div>
       <div class="form-group">
        <label for="kelas" class="col-sm-2 control-label">Kelas</label>
        <div class="col-sm-10">
         <textarea type="text" class="form-control" id="kelas" name="kelas" ></textarea>
        </div>
       </div>
      </form>
      
     </div>
     <div class="modal-footer">
      <button type="button" onClick="submitUser()" class="btn btn-default" data-dismiss="modal">Submit</button>
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
     </div>
    </div>
   </div>
  </div>
  
  <script>
  
      //Tampilkan Modal 
   function showModals( id )
   {
    waitingDialog.show();
    clearModals();
    
    // Untuk Eksekusi Data Yang Ingin di Edit atau Di Hapus 
    if( id )
    {
     $.ajax({
      type: "POST",
      url: "crud.php",
      dataType: 'json',
      data: {id:id,type:"get"},
      success: function(res) {
       waitingDialog.hide();
       setModalData( res );
      }
     });
    }
    // Untuk Tambahkan Data
    else
    {
     $("#myModals").modal("show");
     $("#myModalLabel").html("New User");
     $("#type").val("new"); 
     waitingDialog.hide();
    }
   }
   
   //Data Yang Ingin Di Tampilkan Pada Modal Ketika Di Edit 
   function setModalData( data )
   {
    $("#myModalLabel").html(data.real_name);
    $("#id").val(data.id);
    $("#type").val("edit");
    $("#userid").val(data.userid);
    $("#real_name").val(data.real_name);
    $("#npm").val(data.npm);
    $("#kelas").val(data.kelas);
    $("#myModals").modal("show");
   }
   
   //Submit Untuk Eksekusi Tambah/Edit/Hapus Data 
   function submitUser()
   {
    var formData = $("#formUser").serialize();
    waitingDialog.show();
    $.ajax({
     type: "POST",
     url: "crud.php",
     dataType: 'json',
     data: formData,
     success: function(data) {
      dTable.ajax.reload(); // Untuk Reload Tables secara otomatis
      waitingDialog.hide(); 
     }
    });
   }
   
   //Hapus Data
   function deleteUser( id )
   {
    clearModals();
    $.ajax({
     type: "POST",
     url: "crud.php",
     dataType: 'json',
     data: {id:id,type:"get"},
     success: function(data) {
      $("#removeWarning").show();
      $("#myModalLabel").html("Delete User");
      $("#id").val(data.id);
      $("#userid").val(data.userid);
      $("#type").val("delete");
      $("#real_name").val(data.real_name).attr("disabled","true");
      $("#npm").val(data.npm).attr("disabled","true");
      $("#kelas").val(data.kelas).attr("disabled","true");
      $("#myModals").modal("show");
      waitingDialog.hide();   
     }
    });
   }
   
   //Clear Modal atau menutup modal supaya tidak terjadi duplikat modal
   function clearModals()
   {
    $("#removeWarning").hide();
    $("#id").val("").removeAttr( "disabled" );
    $("#userid").val("").removeAttr( "disabled" );
    $("#real_name").val("").removeAttr( "disabled" );
    $("#npm").val("").removeAttr( "disabled" );
    $("#type").val("");
    $("#kelas").val("").removeAttr( "disabled" );
   }
   
  </script>
  
 </BODY>
</HTML>

index.php in Pastebin.Com Click Here

7. Setelah "index.php" maka buat file "serverSide.php" script ini untuk load data kita ke file
    "index.php" berikut script nya.



<?php
 /**
  * Script:    DataTables server-side script for PHP 5.2+ and MySQL 4.1+
  * Notes:     Based on a script by Allan Jardine that used the old PHP mysql_* functions.
  *            Rewritten to use the newer object oriented mysqli extension.
  * Copyright: 2010 - Allan Jardine (original script)
  *            2012 - Kari Söderholm, aka Haprog (updates)
  * License:   GPL v2 or BSD (3-point)
 */
 mb_internal_encoding('UTF-8');
 
 /**
  * Array of database columns which should be read and sent back to DataTables. Use a space where
  * you want to insert a non-database field (for example a counter or static image)
 */
 $aColumns = array( 'id','userid', 'real_name', 'npm', 'kelas' ); //Kolom Pada Tabel
 
 // Indexed column (used for fast and accurate table cardinality)
 $sIndexColumn = 'id';
 
 // DB table to use
 $sTable = 'user'; // Nama Tabel
 
 // Database connection information
 $gaSql['user']     = 'root';
 $gaSql['password'] = '';   
 $gaSql['db']       = 'datatables_ku';  //Database
 $gaSql['server']   = 'localhost';   
 $gaSql['port']     = 3306; // 3306 is the default MySQL port
 
 // Input method (use $_GET, $_POST or $_REQUEST)
 $input =& $_POST;

 $gaSql['charset']  = 'utf8';
 
 /**
  * MySQL connection
 */
 $db = new mysqli($gaSql['server'], $gaSql['user'], $gaSql['password'], $gaSql['db'], $gaSql['port']);
 if (mysqli_connect_error()) {
  die( 'Error connecting to MySQL server (' . mysqli_connect_errno() .') '. mysqli_connect_error() );
 }
 
 if (!$db->set_charset($gaSql['charset'])) {
  die( 'Error loading character set "'.$gaSql['charset'].'": '.$db->error );
 }
 
 
 /**
  * Paging
 */
 $sLimit = "";
 if ( isset( $input['iDisplayStart'] ) && $input['iDisplayLength'] != '-1' ) {
  $sLimit = " LIMIT ".intval( $input['iDisplayStart'] ).", ".intval( $input['iDisplayLength'] );
 }
 
 
 /**
  * Ordering
 */
 $aOrderingRules = array();
 if ( isset( $input['iSortCol_0'] ) ) {
  $iSortingCols = intval( $input['iSortingCols'] );
  for ( $i=0 ; $i<$iSortingCols ; $i++ ) {
   if ( $input[ 'bSortable_'.intval($input['iSortCol_'.$i]) ] == 'true' ) {
    $aOrderingRules[] =
                "`".$aColumns[ intval( $input['iSortCol_'.$i] ) ]."` "
                .($input['sSortDir_'.$i]==='asc' ? 'asc' : 'desc');
   }
  }
 }
 
 if (!empty($aOrderingRules)) {
  $sOrder = " ORDER BY ".implode(", ", $aOrderingRules);
  } else {
  $sOrder = "";
 }
 
 
 /**
  * Filtering
  * NOTE this does not match the built-in DataTables filtering which does it
  * word by word on any field. It's possible to do here, but concerned about efficiency
  * on very large tables, and MySQL's regex functionality is very limited
 */
 $iColumnCount = count($aColumns);
 
 if ( isset($input['sSearch']) && $input['sSearch'] != "" ) {
  $aFilteringRules = array();
  for ( $i=0 ; $i<$iColumnCount ; $i++ ) {
   if ( isset($input['bSearchable_'.$i]) && $input['bSearchable_'.$i] == 'true' ) {
    $aFilteringRules[] = "`".$aColumns[$i]."` LIKE '%".$db->real_escape_string( $input['sSearch'] )."%'";
   }
  }
  if (!empty($aFilteringRules)) {
   $aFilteringRules = array('('.implode(" OR ", $aFilteringRules).')');
  }
 }
 
 // Individual column filtering
 for ( $i=0 ; $i<$iColumnCount ; $i++ ) {
  if ( isset($input['bSearchable_'.$i]) && $input['bSearchable_'.$i] == 'true' && $input['sSearch_'.$i] != '' ) {
   $aFilteringRules[] = "`".$aColumns[$i]."` LIKE '%".$db->real_escape_string($input['sSearch_'.$i])."%'";
  }
 }
 
 if (!empty($aFilteringRules)) {
  $sWhere = " WHERE ".implode(" AND ", $aFilteringRules);
  } else {
  $sWhere = "";
 }
 
 
 /**
  * SQL queries
  * Get data to display
 */
 $aQueryColumns = array();
 foreach ($aColumns as $col) {
  if ($col != ' ') {
   $aQueryColumns[] = $col;
  }
 }
 
 $sQuery = "
    SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", $aQueryColumns)."`
    FROM `".$sTable."`".$sWhere.$sOrder.$sLimit;
 
 $rResult = $db->query( $sQuery ) or die($db->error);
 
 // Data set length after filtering
 $sQuery = "SELECT FOUND_ROWS()";
 $rResultFilterTotal = $db->query( $sQuery ) or die($db->error);
 list($iFilteredTotal) = $rResultFilterTotal->fetch_row();
 
 // Total data set length
 $sQuery = "SELECT COUNT(`".$sIndexColumn."`) FROM `".$sTable."`";
 $rResultTotal = $db->query( $sQuery ) or die($db->error);
 list($iTotal) = $rResultTotal->fetch_row();
 
 
 /**
  * Output
 */
 $output = array(
    "sEcho"                => intval($input['sEcho']),
    "iTotalRecords"        => $iTotal,
    "iTotalDisplayRecords" => $iFilteredTotal,
    "aaData"               => array(),
 );
 
 // Looping Data
 while ( $aRow = $rResult->fetch_assoc() ) {
  $row = array();
  $btn = '<a href="#" onClick="showModals('.$aRow['id'].')">Edit</a> | <a href="#" onClick="deleteUser('.$aRow['id'].')">delete</a>';
  for ( $i=0 ; $i<$iColumnCount ; $i++ ) {
   $row[] = $aRow[ $aColumns[$i] ];
  }
  $row = array( $btn, $aRow['userid'], $aRow['real_name'], $aRow['npm'], $aRow['kelas'] );
  $output['aaData'][] = $row;
 }
 
 echo json_encode( $output );
 
?>

serverSide.php in Pastebin.Com Click Here

8. Nah script terakhir nih, yaitu membuat CRUD (CREATE, READ, UPDATE, DELETE)
    Supaya datanya bisa di Tambah, Edit dan Di Hapus. Buat file "crud.php"
    berikut scriptnya.



<?php
 //Connection Database
 $con = mysqli_connect("localhost","root","","datatables_ku");
 if (mysqli_connect_errno())
 {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }
 
 switch ($_POST['type']) {
  
  //Tampilkan Data 
  case "get":
   
   $SQL = mysqli_query($con, "SELECT * FROM user WHERE id='".$_POST['id']."'");
   $return = mysqli_fetch_array($SQL,MYSQLI_ASSOC);
   echo json_encode($return);
   break;
  
  //Tambah Data 
  case "new":
   
   $userid = date("ymdhis")."_".rand(0,10);
   $SQL = mysqli_query($con, 
         "INSERT INTO user SET 
          userid='".$userid."', 
          real_name='".$_POST['real_name']."', 
          npm='".$_POST['npm']."', 
          kelas='".$_POST['kelas']."'
        ");
   if($SQL){
    echo json_encode("OK");
   }
   break;
   
  //Edit Data 
  case "edit":
   
   $SQL = mysqli_query($con, 
         "UPDATE user SET 
          real_name='".$_POST['real_name']."', 
          npm='".$_POST['npm']."', 
          kelas='".$_POST['kelas']."'
         WHERE userid='".$_POST['userid']."'
        ");
   if($SQL){
    echo json_encode("OK");
   }   
   break;
   
  //Hapus Data 
  case "delete":
   
   $SQL = mysqli_query($con, "DELETE FROM user WHERE userid='".$_POST['userid']."'");
   if($SQL){
    echo json_encode("OK");
   }   
   break;
 } 
 
?>

crud.php in Pastebin.Com Click Here


Selesai deh lihat hasilnya gih :)


Hasilnya







UPDATE
Wah banyak yang tertarik ya, Malah ada yang nyaranin suruh bikin buku hahaha 
Pada pengen tau cara join tablenya gimana hahaha. Nih sample/contoh cara join nya



<?php
                function mysqliConnection()
                        {              
                                // Database connection information
                                $gaSql['user']     = 'root';
                                $gaSql['password'] = '';  
                                $gaSql['db']       = 'datatables_ku';  //Database
                                $gaSql['server']   = 'localhost';  
                                $gaSql['port']     = 3306; // 3306 is the default MySQL port
                                $gaSql['charset']  = 'utf8';
                                $db = new mysqli($gaSql['server'], $gaSql['user'], $gaSql['password'], $gaSql['db'], $gaSql['port']);
                                if (mysqli_connect_error()) {
                                        die( 'Error connecting to MySQL server (' . mysqli_connect_errno() .') '. mysqli_connect_error() );
                                }
                               
                                if (!$db->set_charset($gaSql['charset'])) {
                                        die( 'Error loading character set "'.$gaSql['charset'].'": '.$db->error );
                                }
                                return $db;
                        }
                       
                function Paging( $input )
                        {
                                $sLimit = "";
                                if ( isset( $input['iDisplayStart'] ) && $input['iDisplayLength'] != '-1' ) {
                                        $sLimit = " LIMIT ".intval( $input['iDisplayStart'] ).", ".intval( $input['iDisplayLength'] );
                                }
                               
                                return $sLimit;
                        }
                       
                       
                function Ordering( $input, $aColumns )
                        {
                                $aOrderingRules = array();
                                if ( isset( $input['iSortCol_0'] ) ) {
                                        $iSortingCols = intval( $input['iSortingCols'] );
                                        for ( $i=0 ; $i<$iSortingCols ; $i++ ) {
                                                if ( $input[ 'bSortable_'.intval($input['iSortCol_'.$i]) ] == 'true' ) {
                                                        $aOrderingRules[] =
                                                        $aColumns[ intval( $input['iSortCol_'.$i] ) ]." "
                                                        .($input['sSortDir_'.$i]==='asc' ? 'asc' : 'desc');
                                                }
                                        }
                                }
                               
                                if (!empty($aOrderingRules)) {
                                        $sOrder = " ORDER BY ".implode(", ", $aOrderingRules);
                                        } else {
                                        $sOrder = "";
                                }
                                return $sOrder;
                        }
                       
                function Filtering( $aColumns, $iColumnCount, $input, $db )
                        {
                                if ( isset($input['sSearch']) && $input['sSearch'] != "" ) {
                                        $aFilteringRules = array();
                                        for ( $i=0 ; $i<$iColumnCount ; $i++ ) {
                                                if ( isset($input['bSearchable_'.$i]) && $input['bSearchable_'.$i] == 'true' ) {
                                                        $aFilteringRules[] = $aColumns[$i]." LIKE '%".$db->real_escape_string( $input['sSearch'] )."%'";
                                                }
                                        }
                                        if (!empty($aFilteringRules)) {
                                                $aFilteringRules = array('('.implode(" OR ", $aFilteringRules).')');
                                        }
                                }
                               
                                // Individual column filtering
                                for ( $i=0 ; $i<$iColumnCount ; $i++ ) {
                                        if ( isset($input['bSearchable_'.$i]) && $input['bSearchable_'.$i] == 'true' && $input['sSearch_'.$i] != '' ) {
                                                $aFilteringRules[] = $aColumns[$i]."  LIKE '%".$db->real_escape_string($input['sSearch_'.$i])."%'";
                                        }
                                }
                               
                                if (!empty($aFilteringRules)) {
                                        $sWhere = "WHERE ".implode(" AND ", $aFilteringRules);
                                        } else {
                                        $sWhere = "WHERE 1=1 ";
                                }
                                return $sWhere;
                        }
                       
 
        mb_internal_encoding('UTF-8');
        $aColumns = array('pv.nama_prov', 'kt.nama_kabkot', 'kc.nama_kec'); //Kolom Pada Tabel
       
        // Indexed column (used for fast and accurate table cardinality)
        $sIndexColumn = 'id_kec';
       
        // DB table to use
        $sTable = 'all_kecamatan'; // Nama Tabel
        $sTable2 = 'all_kabkot'; // Nama Tabel
        $sTable3 = 'all_provinsi'; // Nama Tabel
       
       
        // Input method (use $_GET, $_POST or $_REQUEST)
        $input =& $_POST;
 
       
        $iColumnCount = count($aColumns);
       
        $db = mysqliConnection();
        $sLimit = Paging( $input );
        $sOrder = Ordering( $input, $aColumns );
        $sWhere = Filtering( $aColumns, $iColumnCount, $input, $db );
       
        $aQueryColumns = array();
        foreach ($aColumns as $col) {
                if ($col != ' ') {
                        $aQueryColumns[] = $col;
                }
        }
       
        $sQuery = "
   SELECT SQL_CALC_FOUND_ROWS pv.id_prov, pv.nama_prov,  kt.id_prov, kt.id_kabkot, kt.nama_kabkot,  kc.id_kabkot, kc.id_kec, kc.nama_kec
   FROM ".$sTable2." AS kt
        inner join ".$sTable3." AS pv  on
        kt.id_prov=pv.id_prov
        inner join ".$sTable." AS kc  on
        kc.id_kabkot=kt.id_kabkot
        ".$sWhere.$sOrder.$sLimit;
       
       
        $rResult = $db->query( $sQuery ) or die($db->error);
        // Data set length after filtering
        $sQuery = "SELECT FOUND_ROWS()";
        $rResultFilterTotal = $db->query( $sQuery ) or die($db->error);
        list($iFilteredTotal) = $rResultFilterTotal->fetch_row();
       
        // Total data set length
        $sQuery = "SELECT COUNT(kc.".$sIndexColumn.") FROM ".$sTable." AS kc INNER JOIN ".$sTable2." AS kt ON kc.id_kabkot = kt.id_kabkot  INNER JOIN ".$sTable3." AS pv ON pv.id_prov = kt.id_prov";
        $rResultTotal = $db->query( $sQuery ) or die($db->error);
        list($iTotal) = $rResultTotal->fetch_row();
       
        /**
                * Output
        */
        $output = array(
    "sEcho"                => intval($input['sEcho']),
    "iTotalRecords"        => $iTotal,
    "iTotalDisplayRecords" => $iFilteredTotal,
    "aaData"               => array(),
        );
       
        // Looping Data
        while ( $aRow = $rResult->fetch_assoc() ) {
                $row = array();
               
                $row = array( $aRow['nama_prov'], $aRow['nama_kabkot'], $aRow['nama_kec']);
                $output['aaData'][] = $row;
        }
       
        echo json_encode( $output );
?>

joinServerSide.php in Pastebin.Com Click Here


Next PostNewer Post Previous PostOlder Post Home

117 comments

  1. Gan, mau tanya kalo mau pake filternya gmn caranya sih.? kok g bisa ya.?

    ReplyDelete
  2. Mksdnya.
    Memfilter Field A to Z / Z to A dan angka kecil ke besar dan sebaliknya kah ?
    kalo agan udh atur table yang ingin di tampilkan dan sudah berhasil muncul.
    Codingan filternya juga bakal berfungsi kok, asal jgn di hapus aja codingan filter pada ServerSide.php
    Demo nya bisa liat disini : http://lefgrin.com/tutorial/datatablesku/



    ReplyDelete
    Replies
    1. OH gitu.. Sebenernya fungsinya serverside apa sih gan.?

      Delete
    2. Bayangin gan jika agan punya 10rb data
      lalu dengan cara metode while seperti ini

      $data = mysqli_query($con,"select * from user");
      while ($datanya = mysqli_fetch_object($data)) {
      echo $datanya->nama;
      }

      wah bisa bisa malah not responding browser agan, cara ini memang gak terasa kalo agan masih punya data ratusan. minimal 1000 data lah.

      Delete
  3. Makasih gan tutorialnya, ngebantu banget :D

    ReplyDelete
  4. memastikan saja.. mas di $("#userid").val(data.userid);
    yang val(data.userid) itu data dalam databasenya kan?

    ReplyDelete
    Replies
    1. Yup, dari database, di taru di javascript jadi seperti itu

      Delete
  5. kalau bagian data: {id:id,type:"get"}, yang mana yang database yang mana yang bukan?

    ReplyDelete
  6. untuk case yang agan pertanyakan, tidak ada database gan
    cuma metode pengiriman

    {id:id,type:"get"}

    id yang ke dua itu value nilai idnya
    id yang pertama variable yang dikirim ke crud.php
    get seperti metode pengirimannya

    jadi jika agan menulis seperti ini

    {idnya:id,type:"get"}

    maka "idnya" yang akan di kirim ke crud.php

    ReplyDelete
  7. gan,

    kalo ane ambil editnya aja gimana gan?
    mau tanya juga fungsi val (new), val (edit) itu gimana ya?

    ReplyDelete
    Replies
    1. Coba di simak baik baik codingannya.
      copy file yg aslinya. lalu yg satunya agan coba otak atik.. pahamin codingannya

      Delete
  8. gan untuk inputan file kok tidak bisa ya? mohon petunjuknya

    ReplyDelete
  9. mas kalau loading lama setelah edit atau tambah itu karena apa ya? mohon bantuannya

    Terima kasih :)

    ReplyDelete
  10. Mantabsss nich contoh nya.
    Kumplit bangettt.

    Tapi aku ada masalah nich.

    Gak bisa loading datanya.

    "Invalid JSON response" Katanya. Kenapa ya?

    Mohon pencerahannya gan.

    Syukron Kastiron
    Terima Kasih Banyak
    Hendi Santika

    ReplyDelete
  11. nah q dah coba sih datatable ngebantu bgt, nah karena data dikantor bisa ratusan ribu akhirnya q pake yg server side karena ngelag klo datatable biasa. pertanyaannya, klo ingin import ke excel gimana ya. yg kebawa ga semuanya cuma dihalaman awal aja.
    oiya seandainya untuk pencarian tiap kolom itu dibuat form tersendiri misal ditaro diatasnya gimana ya. jadi ga ditaro di masing2 kolom

    ReplyDelete
    Replies
    1. Kalo yang import ke excel, kayaknya memang cuma di pangging itu aja. Tapi ane ada trik, dulu di tempat kerja kodingan import sama datatables terpisah. Jadi di kodingan import tidak terlimit paging datatables, melainkan mengambil semua data pada table

      untuk costum kolom, mungkin bisa coba otak atik gan. dokumentasi bisa di cek disini > https://www.datatables.net/

      Delete
  12. bagaimana menampilkan data yang terdiri dari beberapa tabel (join) misal dalam tabel desa ada kode kecamatan, kode kecamatan ingin ditampilkan bukan nama kodenya tetapi nama kecamatannya dimana nama kecamatan ada dalam tabel kecamatan.
    trims

    ReplyDelete
    Replies
    1. Begini maksudnya gan ??
      http://lefgrin.com/tutorial/datatablesku/join.php

      Article sudah di update, silahkan di cek sample script joinnya.

      Terima Kasih

      Delete
  13. ini bukan sejenis framwork kan gan ??

    ReplyDelete
  14. Ada error json knp ya..



    Parse error: syntax error, unexpected ''.$aRow['' (T_CONSTANT_ENCAPSED_STRING) in C:\xampp\htdocs\datatablesku\serverSide.php on line 156



    Parse error: syntax error, unexpected ''.$aRow['' (T_CONSTANT_ENCAPSED_STRING) in C:\xampp\htdocs\datatablesku\serverSide.php on line 156

    ReplyDelete
    Replies
    1. coba code serverSide.php nya taro di pastebin.com gan.

      Delete
  15. kalau menampilkan data berdasarkan kriteria tertentu dimana gan......
    contooh :

    SELECT * FROM nama_tabel WHERE field = kriteria

    ReplyDelete
  16. terimakasih mas sangat membantu saya yang baru belajar :D

    ReplyDelete
  17. Klo pake select option dari table lain gimana gan? misal ada kategorinya. mohon bantuannya.

    ReplyDelete
    Replies
    1. hayo coba oprek oprek sendiri gampang kok itu tinggal maenin di querynya saja

      Delete
    2. udah nyoba2 gan cuma emang dasarnya blum bisa, makanya nanya sama agan.

      Delete
    3. nih mas sample querynya : http://pastebin.com/H7dXN8BX

      Delete
    4. Makasih gah sebelumnya, maksud saya select option pada saat input atau edit data pada modalnya. maaf ngerepotin

      Delete
  18. makasih banyak mas tutornya sangat membantu

    saya ada error invalid json itu karena apa ya mas?
    seperti link dibawah errornya
    https://goo.gl/K2pjQX

    ini code index persis dengan punya mas
    http://pastebin.com/AN7NeJ8K

    untuk index, serverSide dll di taruh di folder yang sama kan gan maaf newbie

    ReplyDelete
    Replies
    1. coba ini gan ,
      http://stackoverflow.com/questions/28600560/datatables-warning-table-id-example-invalid-json-response

      Delete
  19. bro, kalau saya tambah kolom trus jd muncul: DataTables warning: table id=example - Requested unknown parameter '5' for row 0. For more information about this error, please see http://datatables.net/tn/4 itu gimana bro? makasih

    ReplyDelete
    Replies
    1. #index.php
      Lihat line 37 s/d 41 pada index.php
      kalo agan nambahin kolom, disitu ditambahin satu juga.
      Lihat line 81 s/d 85 pada index.php di tambahkan juga kolomnya
      Lihat line 91 s/d 95 pada index.php di tambahkan juga kolomnya
      http://pastebin.com/nhJHpiZv

      #serverSide.php
      Lalu lihat line 159, tambahkan kolom disitu juga.
      http://pastebin.com/k0KFSS7t

      Perlu di perhatikan pastikan script query sudah benar ya, agan bisa coba di querynya di localhost/phpmyadmin

      Delete
  20. thanks bro atas jawabannya, tanya lg.. kalau setting lebar kolom gimana ya? tak coba seting dari css gak bisa.

    dan kalau kolom ada banyak yg terlihat kok ndak semua ya?.. contoh ada 10 kolom, yg terlihat cuma 8, kalau browser di zoom out baru keliatan semua. terimakasih.

    ReplyDelete
  21. baru nemu tutorialnya.. makasih mas... mohon ijin nimba ilmu.... kalo di jadikan buku pasti saya beli ( cuma satu pastinya... ) makasih telah share ilmu....

    ReplyDelete
  22. Wah makasih banget gan tutorialnya membantu sekali

    ReplyDelete
    Replies
    1. mas, kira-kira tau gak gimana caranya supaya si columnwidth datatables nya menyesuaikan dengan isi datanya? trims.

      Delete
    2. ini gan di cek > http://gajelos.tk/test/index.php
      di ctrl + u terus di liat

      ada perbedaan di javascript sama file yang di include :)
      silahkan di coba :)

      Delete
  23. sangat membantu sekali gan. saya punya pertanyaan, kalo mau pake customer where gimana yah? saya coba menambahkan di $sWhere = xxx, berhasil, tapi pas pake search box nya, gagal. mohon petunjuknya gan, thank you

    $Where = "realization_date <> \"\" ";
    if (!empty($aFilteringRules)) {
    $sWhere = " WHERE ".implode(" AND ", $aFilteringRules);
    } else {
    $sWhere = " WHERE " . $Where;
    }

    ReplyDelete
    Replies
    1. Mksdnya bagaimana gan ??
      kalo tambahin filteran pada where bukan disitu gan tapi di quernya
      contoh

      http://pastebin.com/bD1UDPCh

      Delete
  24. gan mau tanya. CRUD nya harus dibuat tiap tabel ya?
    misalnya tabel pembeli dan Konsumen , masing masing Punya 1 ya gan?

    ReplyDelete
  25. Gan, tolong ditambahin Validasi, baik saat tambah data maupun edit datanya. saya coba untuk tambahin sendiri tapi masih belum bisa. Maklum Newbie. Mohon dibantu gan. Terima Kasih.

    ReplyDelete
    Replies
    1. Pelajari SweetAlert ^_^
      http://t4t5.github.io/sweetalert/

      Delete
  26. thanks untuk responnya. saya sudah coba gabungkan code dari tutorial ini dengan tutorial lainnya. dan berhasil.

    ReplyDelete
  27. tutorialnya sangat membantu gan.

    saya sudah coba source codenya dan berhasil, tapi kenapa ya pas saya coba pakai db sendiri pas delete malah loading terus ? padahal data sudah berhasil ditampilkan
    mohon bantuannya ya gan, terima kasih

    ReplyDelete
  28. Mas...
    Saya sudah coba script nya, langsung dari yang di kasih. tapi masih ada error JSON nya.
    Ada pencerahan? Thx

    ReplyDelete
  29. Mas mohon bantuannya,
    bagaimana cara mengirim value ke modal untuk di edit khususnya pada radio button dan select option value
    $("#real_name").val(data.real_name);// Untuk input type text Oc
    $("#gender").val(data.sexo); // Untuk radio button pada modal tidak checked sesuai data sexo
    $("#pilihan").val(data.level); // Untuk select option juga tidak terpilih pada option value selected pada modal...

    Maaf newbie

    Mohon bantuannya Mas...

    ReplyDelete
    Replies
    1. $("#pilihan").val(data.level); << ini bisa untuk select option yg penting value ada pada id pilihan

      kalo radio button begini gan
      $("#gender[value="+data.sexo+"]").prop('checked', true);
      atau begini
      $("input[name=gender][value="+data.sexo+"]").prop('checked', true);

      Delete
  30. Gan mau tanya dunk.. saya kan lagi buat P.O.S untuk toko saya menggunakan ci3 dan adminLTE dgn datatable serta modal. Permasalahannya pada menu pembelian bagaimana cara membuat bilangan terbilang dan total pembelian serta dicon gitu?

    Jika berkenan mohon bantuannya gan. Mentok banget. Saya shar digithub ya berikut linknya

    https://goo.gl/3l2RCm

    Sebelumnya makasih ya gan

    ReplyDelete
  31. Gan mau tanya dunk.. saya kan lagi buat P.O.S untuk toko saya menggunakan ci3 dan adminLTE dgn datatable serta modal. Permasalahannya pada menu pembelian bagaimana cara membuat bilangan terbilang dan total pembelian serta dicon gitu?

    Jika berkenan mohon bantuannya gan. Mentok banget. Saya shar digithub ya berikut linknya

    https://goo.gl/3l2RCm

    Sebelumnya makasih ya gan

    ReplyDelete
  32. kak,,, mau tanya dong klo table nya tidak tampil kenapa yah, jadinya processing...

    mohon bantunya kak, terimakasih

    ReplyDelete
  33. Bang ada export to excel gk soalnya nyari - nyari masih error juga

    ReplyDelete
    Replies
    1. coba ini gan, aku pake ini lancar jaya.
      https://datatables.net/extensions/buttons/examples/flash/simple.html

      Delete
  34. bang kok punya ane kagak bisa di sumbit, edit, hapus?
    kalau mau di submit ada progress bar ga ilang2, edit tidak ada respon

    ReplyDelete
  35. makasih mas kebetulan lagi nyari script spt ini
    mau tanya ada referensi buat halaman loginnya?

    ReplyDelete
  36. gan artikelnya mantapp,, tapi ada yang kurang deh. qlo form input type:file gimana caranya gan ?soalnya pake $("#formUser").serialize(); ga bisa. ada solusi kah buat ngirim gambar pake script ini : function submitUser()
    {
    var formData = $("#formUser").serialize();
    waitingDialog.show();
    $.ajax({
    type: "POST",
    url: "crud.php",
    dataType: 'json',
    data: formData,
    success: function (data) {
    dTable.ajax.reload(); // Untuk Reload Tables secara otomatis
    waitingDialog.hide();
    }
    });
    }


    tq gan, mohon pencerahan senpai...

    ReplyDelete
  37. sudah done gan problem nya, qlo mau nampilkan form dengan image pake modal, mending pake ajax tapi metode submit pake .prevendefault() . trs tombol submit di masukin ke dalem form, dan fungsi modal-dismis dihilangkan. solve !!!

    ReplyDelete
  38. Mantapp... sangat bermanfaat ilmunya buat pemula seperti saya.. :D makasih banyak Om.

    ReplyDelete
  39. Gan mau tanya dong...
    kalo mau nampilin No. urutnya biar otomatis ditambahin apa ya??
    mohon bantuannya..

    ReplyDelete
  40. Thanks gan bermanfaat sekali,
    gan mau tanya dong, sy bikin database dengan 9 kolom tetapi yang ditampilkan selalu 5 kolom saja, apa di script agan diatas memang sudah diatur hanya untuk menampilkan 5 kolom?

    ReplyDelete
  41. kenapa gan kok gini ya yang saya

    "Invalid JSON response" Katanya. Kenapa ya?

    Mohon pencerahannya gan.

    ReplyDelete
  42. yg joinserverside.php fungsi filtering nya kok error yah?

    ReplyDelete
    Replies
    1. Maaf baru balas. Silahkan di coba yang ini gan.
      https://www.dropbox.com/s/vwec6sqmz0ptywl/datatablesku_select.zip
      Jangan lupa di like ya https://www.facebook.com/lefgrin

      Delete
  43. Mau tanya, waitingdialog.show() itu bisa keluar darimana ya? dari bootstrap kah atau dari datatablesnya?

    Terima Kasih..

    ReplyDelete
    Replies
    1. dari boostrapnya gan.
      buka folder : assets\media\js

      Delete
  44. bisa upload yg terbaru ga file dan database yang update ma join table om ?

    ReplyDelete
    Replies
    1. Maaf baru balas. Ini gan contohnya, sudah saya buat.
      https://www.dropbox.com/s/srwfpzd3r0w1gai/datatablesku_select.zip

      Jangan lupa di like ya https://www.facebook.com/lefgrin

      Delete
    2. Link sebelumnya saya hapus.
      silahkan di download pada link ini > https://www.dropbox.com/s/vwec6sqmz0ptywl/datatablesku_select.zip

      Delete
  45. gan, klo beda database yg d ganti d serverside.php mana aja ???
    koq g berhasil y ???

    ReplyDelete
  46. Sangat Membantu Gan
    Memastikan yang dii database yang mana ya?
    userid='".$_POST['userid']

    ReplyDelete
    Replies
    1. Kalo kondisi new, saya buat format > Ymdhis_random10angka
      (Year MontDay Hour mInute Second) bisa di cek di bagian crud pada variable $userid

      Kalo kondisi edit di taro kembali ke html index tapi type hidden, lalu di kirim kembali utk jadi parameter edit

      Kira kira sudah jelas ya :)
      Jangan lupa di like ya https://www.facebook.com/lefgrin

      Delete
  47. Work !!!
    Berhasil :-)
    Terimaksih banyak Gan,,,
    Semoga ilmunya terus bermanfaat selamanya :-)

    ReplyDelete
  48. Work !!!
    Berhasil :-)
    Terimaksih banyak Gan,,,
    Semoga ilmunya terus bermanfaat selamanya :-)

    ReplyDelete
  49. klw data nya di pakai untuk di menu dropdown gimana ya master?
    sementara data yg di hasilkan hanya utk table
    tq

    ReplyDelete
    Replies
    1. Maaf baru balas. Ini gan contohnya, sudah saya buat.
      https://www.dropbox.com/s/srwfpzd3r0w1gai/datatablesku_select.zip

      Jangan lupa di like ya https://www.facebook.com/lefgrin

      Delete
    2. Link sebelumnya saya hapus.
      silahkan di download pada link ini > https://www.dropbox.com/s/vwec6sqmz0ptywl/datatablesku_select.zip

      Delete
  50. gan mau tanya di file serverside.php itu kan ada table yang digunakan
    $sTable, kalau saya ingin select lebih dari satu table seperti table pegawai sama jabatan itu bgaimana ya? mohon bantuannya gan
    terimakasih

    ReplyDelete
    Replies
    1. Ini gan contohnya, sudah saya buat.
      https://www.dropbox.com/s/srwfpzd3r0w1gai/datatablesku_select.zip

      Jangan lupa di like ya https://www.facebook.com/lefgrin

      Delete
  51. gan bisa nampilin Nomor urutnya gak ya? contoh 1-10, 11-20 dst...tks

    ReplyDelete
  52. gan bisa nampilin Nomor urutnya gak ya? contoh 1-10, 11-20 dst...tks

    ReplyDelete
    Replies
    1. wah ternyata gak bisa ya, yg sudah saya share tadi.
      ternyata di page selanjutnya di ulang lagi. coba di cari disi dulu ya gan.
      https://datatables.net/

      Delete
  53. gan, ane udh coba. dan berhasil semua. tp pas instal ulang browser kok g muncul datanya ya?

    ReplyDelete
    Replies
    1. Penyebab : Cache, Browser tidak support.
      keep try ya. di browser ada menu developer/pengembang nah habis itu.
      Klik Network, refresh ulang lalu lihat ajax nya jalan gak ?

      Delete
  54. Udh bisa saya coba ga, tapi saya mau nny klo query ini saya tambahkan tabel lain dan menampilkan ketika di edit itu bisa ga ya?

    case "get":

    $SQL = mysqli_query($con, "SELECT * FROM tbl_list_pekerjaan WHERE id='".$_POST['id']."'");
    $return = mysqli_fetch_array($SQL,MYSQLI_ASSOC);
    echo json_encode($return);

    break;

    ReplyDelete
    Replies
    1. bisa pakai query join table
      http://www.w3schools.com/sql/sql_join.asp

      Delete
  55. Master mau nny lagi, di query ini kan saya mau nampilih 2 tabel pas di edit malah load mulu ya, minta solusi.nya master
    case "get":

    $SQL = mysqli_query($con, "SELECT * FROM tbl_detail_list b, tbl_list_pekerjaan a WHERE id.a='".$_POST['id']."'");
    $return = mysqli_fetch_array($SQL,MYSQLI_ASSOC);
    echo json_encode($return);

    break;

    ReplyDelete
  56. mau tanya gan, bagaimana editnya jika di modal ada inut select?

    ReplyDelete
  57. nampilkan foto pada tabel gimana gan ?

    ReplyDelete
  58. gan... ane tambahain kolomnya tapi.. pas edit dan tambah data ngak bisa "procesing.... terus".. kalau hapus data jalan

    ReplyDelete
  59. gann, yang baik n super hebbat.
    klo sya mau edit, search nya ada diatas gmn ya caranyaa? kaga dibawah.
    pliss infonya.

    ReplyDelete
  60. mantap gan (y) , klo bisa tambahin cetak dokumen nya :D

    ReplyDelete
  61. gan ditunggu update script dengan ditambah validasi apabila kosong atau apabila tidak sesuai keinginan misal text tertentu wajib angka dan bagaimana cara upload foto di form modal

    ReplyDelete
  62. Nuhub gan..
    Ane kesulitan buat filtering id..
    Kebetulan ane make auto generate id
    Bukan auto_increment
    Contohnya kaya gini gan
    007/DP/ST/XII/16

    Nah pas search id hasilnye no result

    Kira kira yg ane mesti edit di file mana gan sama baris mana ya?

    ReplyDelete
  63. gan kalo mau buat checkbox di modal lalu saat menu(modal edit) terbuka checkbox tsb tampil "checked" sesuai value database dan dapat diedit perlu script apa yaa sekalian script untuk save ke serversidenya ya gan hehe thx

    ReplyDelete
  64. gan tanya dong, punya contoh kalau data yang di ambil dari stored procedure?

    ReplyDelete