Bootstrap 5.1 Version
https://getbootstrap.com/docs/5.1/getting-started/introduction/
DataTables is a plug-in for the jQuery Javascript library. It is a highly flexible tool, built upon the foundations of progressive enhancement, that adds all of these advanced features to any HTML table.
https://datatables.net/
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`username` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`mobile` varchar(20) NOT NULL,
`city` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `users` (`id`, `username`, `email`, `mobile`, `city`) VALUES
(7, 'Airi Satou', 'AiriSatou@gmail.com', '8887919632', 'Tokyo'),
(8, 'Angelica Ramos', 'AngelicaRamos@gmail.com', '8887919632', 'London'),
(9, 'Ashton Cox', 'AshtonCox@gmail.com', '8887919632', 'San Francisco'),
(10, 'Bradley Greer', 'BradleyGreer@gmail.com', '434334', 'London'),
(11, 'Brenden Wagner', 'BrendenWagner@gmail.com', '434334', 'San Francisco'),
(12, 'Brielle Williamson', 'BrielleWilliamson@gmail.com', '434334', 'New York'),
(13, 'Bruno Nash', 'BrunoNash@gmail.com', '9988999999', 'London'),
(15, 'Caesar Vance', 'CaesarVance@gmail.com', '8127956219', 'New York'),
(16, 'Cara Stevens', 'CaraStevens@gmail.com', '8127956219', 'New York'),
(18, 'Cedric Kelly', 'CedricKelly@gmail.com', '8127956219', 'Edinburgh'),
(19, 'Charde Marshall', 'ChardeMarshall@Gmail.com', '5464654654', 'San Francisco'),
(20, 'Colleen Hurst', 'ColleenHurst@Gmail.com', '5465465465', 'San Francisco'),
(21, 'Garrett Winters', 'GarrettWinters@gmail.com', '346546465', 'Olongapo City');
ALTER TABLE `users`
ADD PRIMARY KEY (`id`);
ALTER TABLE `users`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=23;
index.php
//index.php <?php include('connection.php');?> <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous"> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.11.4/css/jquery.dataTables.min.css"/> <title>PHP Mysqli Datatables Server Side CRUD Ajax (Create, Read, Update and Delete)</title> <style type="text/css"> .btnAdd { text-align: right; width: 83%; margin-bottom: 20px; } </style> </head> <body> <div class="container-fluid"> <h2 class="text-center">PHP Mysqli Datatables Server Side CRUD Ajax (Create, Read, Update and Delete)</h2> <div class="row"> <div class="container"> <div class="btnAdd"> <a href="#!" data-id="" data-bs-toggle="modal" data-bs-target="#addUserModal" class="btn btn-success btn-sm" >Add User</a> </div> <div class="row"> <div class="col-md-2"></div> <div class="col-md-8"> <table id="example" class="table"> <thead> <th>Id</th> <th>Name</th> <th>Email</th> <th>Mobile</th> <th>City</th> <th>Options</th> </thead> <tbody> </tbody> </table> </div> <div class="col-md-2"></div> </div> </div> </div> <?php include('modal.php'); ?> </div> <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script> <script type="text/javascript" src="https://cdn.datatables.net/1.11.4/js/jquery.dataTables.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#example').DataTable({ "fnCreatedRow": function( nRow, aData, iDataIndex ) { $(nRow).attr('id', aData[0]); }, 'serverSide':'true', 'processing':'true', 'paging':'true', 'order':[], 'ajax': { 'url':'fetch_data.php', 'type':'post', }, "columnDefs": [{ 'target':[5], 'orderable' :false, }] }); } ); $(document).on('submit','#addUser',function(e){ e.preventDefault(); var city= $('#addCityField').val(); var username= $('#addUserField').val(); var mobile= $('#addMobileField').val(); var email= $('#addEmailField').val(); if(city != '' && username != '' && mobile != '' && email != '' ) { $.ajax({ url:"add_user.php", type:"post", data:{city:city,username:username,mobile:mobile,email:email}, success:function(data) { var json = JSON.parse(data); var status = json.status; if(status=='true') { mytable =$('#example').DataTable(); mytable.draw(); $('#addUserModal').modal('hide'); } else { alert('failed'); } } }); } else { alert('Fill all the required fields'); } }); $(document).on('submit','#updateUser',function(e){ e.preventDefault(); var city= $('#cityField').val(); var username= $('#nameField').val(); var mobile= $('#mobileField').val(); var email= $('#emailField').val(); var trid= $('#trid').val(); var id= $('#id').val(); if(city != '' && username != '' && mobile != '' && email != '' ) { $.ajax({ url:"update_user.php", type:"post", data:{city:city,username:username,mobile:mobile,email:email,id:id}, success:function(data) { var json = JSON.parse(data); var status = json.status; if(status=='true') { table =$('#example').DataTable(); var button = '<td><a href="javascript:void();" data-id="' +id + '" class="btn btn-info btn-sm editbtn">Edit</a> <a href="#!" data-id="' +id + '" class="btn btn-danger btn-sm deleteBtn">Delete</a></td>'; var row = table.row("[id='"+trid+"']"); row.row("[id='" + trid + "']").data([id,username,email,mobile,city,button]); $('#exampleModal').modal('hide'); } else { alert('failed'); } } }); } else { alert('Fill all the required fields'); } }); $('#example').on('click','.editbtn ',function(event){ var table = $('#example').DataTable(); var trid = $(this).closest('tr').attr('id'); var id = $(this).data('id'); $('#exampleModal').modal('show'); $.ajax({ url:"get_single_data.php", data:{id:id}, type:'post', success:function(data) { var json = JSON.parse(data); $('#nameField').val(json.username); $('#emailField').val(json.email); $('#mobileField').val(json.mobile); $('#cityField').val(json.city); $('#id').val(id); $('#trid').val(trid); } }) }); $(document).on('click','.deleteBtn',function(event){ var table = $('#example').DataTable(); event.preventDefault(); var id = $(this).data('id'); if(confirm("Are you sure want to delete this User ? ")) { $.ajax({ url:"delete_user.php", data:{id:id}, type:"post", success:function(data) { var json = JSON.parse(data); status = json.status; if(status=='success') { $("#"+id).closest('tr').remove(); } else { alert('Failed'); return; } } }); } else { return null; } }) </script> </body> </html>modal.php
//modal.php <!-- Add user Modal --> <div class="modal fade" id="addUserModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Add User</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <form id="addUser" action=""> <div class="mb-3 row"> <label for="addUserField" class="col-md-3 form-label">Name</label> <div class="col-md-9"> <input type="text" class="form-control" id="addUserField" name="name" > </div> </div> <div class="mb-3 row"> <label for="addEmailField" class="col-md-3 form-label">Email</label> <div class="col-md-9"> <input type="email" class="form-control" id="addEmailField" name="email"> </div> </div> <div class="mb-3 row"> <label for="addMobileField" class="col-md-3 form-label">Mobile</label> <div class="col-md-9"> <input type="text" class="form-control" id="addMobileField" name="mobile"> </div> </div> <div class="mb-3 row"> <label for="addCityField" class="col-md-3 form-label">City</label> <div class="col-md-9"> <input type="text" class="form-control" id="addCityField" name="City"> </div> </div> <div class="text-center"> <button type="submit" class="btn btn-primary">Submit</button> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> </div> </div> </div> </div> <!-- Modal --> <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Update User</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <form id="updateUser" > <input type="hidden" name="id" id="id" value=""> <input type="hidden" name="trid" id="trid" value=""> <div class="mb-3 row"> <label for="nameField" class="col-md-3 form-label">Name</label> <div class="col-md-9"> <input type="text" class="form-control" id="nameField" name="name" > </div> </div> <div class="mb-3 row"> <label for="emailField" class="col-md-3 form-label">Email</label> <div class="col-md-9"> <input type="email" class="form-control" id="emailField" name="email"> </div> </div> <div class="mb-3 row"> <label for="mobileField" class="col-md-3 form-label">Mobile</label> <div class="col-md-9"> <input type="text" class="form-control" id="mobileField" name="mobile"> </div> </div> <div class="mb-3 row"> <label for="cityField" class="col-md-3 form-label">City</label> <div class="col-md-9"> <input type="text" class="form-control" id="cityField" name="City"> </div> </div> <div class="text-center"> <button type="submit" class="btn btn-primary">Submit</button> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> </div> </div> </div> </div>connection.php
//connection.php <?php $con = mysqli_connect('localhost','root','','testingdb'); if(mysqli_connect_errno()) { echo 'Database Connection Error'; }fetch_data.php
//fetch_data.php <?php include('connection.php'); $output= array(); $sql = "SELECT * FROM users "; $totalQuery = mysqli_query($con,$sql); $total_all_rows = mysqli_num_rows($totalQuery); if(isset($_POST['search']['value'])) { $search_value = $_POST['search']['value']; $sql .= " WHERE username like '%".$search_value."%'"; $sql .= " OR email like '%".$search_value."%'"; $sql .= " OR mobile like '%".$search_value."%'"; $sql .= " OR city like '%".$search_value."%'"; } if(isset($_POST['order'])) { $column_name = $_POST['order'][0]['column']; $order = $_POST['order'][0]['dir']; $sql .= " ORDER BY ".$column_name." ".$order.""; } else { $sql .= " ORDER BY id desc"; } if($_POST['length'] != -1) { $start = $_POST['start']; $length = $_POST['length']; $sql .= " LIMIT ".$start.", ".$length; } $query = mysqli_query($con,$sql); $count_rows = mysqli_num_rows($query); $data = array(); while($row = mysqli_fetch_assoc($query)) { $sub_array = array(); $sub_array[] = $row['id']; $sub_array[] = $row['username']; $sub_array[] = $row['email']; $sub_array[] = $row['mobile']; $sub_array[] = $row['city']; $sub_array[] = '<a href="javascript:void();" data-id="'.$row['id'].'" class="btn btn-info btn-sm editbtn" >Edit</a> <a href="javascript:void();" data-id="'.$row['id'].'" class="btn btn-danger btn-sm deleteBtn" >Delete</a>'; $data[] = $sub_array; } $output = array( 'draw'=> intval($_POST['draw']), 'recordsTotal' =>$count_rows , 'recordsFiltered'=> $total_all_rows, 'data'=>$data, ); echo json_encode($output);add_user.php
//add_user.php <?php include('connection.php'); $username = $_POST['username']; $email = $_POST['email']; $mobile = $_POST['mobile']; $city = $_POST['city']; $sql = "INSERT INTO `users` (`username`,`email`,`mobile`,`city`) values ('$username', '$email', '$mobile', '$city' )"; $query= mysqli_query($con,$sql); $lastId = mysqli_insert_id($con); if($query ==true) { $data = array( 'status'=>'true', ); echo json_encode($data); } else { $data = array( 'status'=>'false', ); echo json_encode($data); } ?>get_single_data.php
//get_single_data.php <?php include('connection.php'); $id = $_POST['id']; $sql = "SELECT * FROM users WHERE id='$id' LIMIT 1"; $query = mysqli_query($con,$sql); $row = mysqli_fetch_assoc($query); echo json_encode($row); ?>update_user.php
//update_user.php <?php include('connection.php'); $username = $_POST['username']; $email = $_POST['email']; $mobile = $_POST['mobile']; $city = $_POST['city']; $id = $_POST['id']; $sql = "UPDATE `users` SET `username`='$username' , `email`= '$email', `mobile`='$mobile', `city`='$city' WHERE id='$id' "; $query= mysqli_query($con,$sql); $lastId = mysqli_insert_id($con); if($query ==true) { $data = array( 'status'=>'true', ); echo json_encode($data); } else { $data = array( 'status'=>'false', ); echo json_encode($data); } ?>delete_user.php
//delete_user.php <?php include('connection.php'); $user_id = $_POST['id']; $sql = "DELETE FROM users WHERE id='$user_id'"; $delQuery =mysqli_query($con,$sql); if($delQuery==true) { $data = array( 'status'=>'success', ); echo json_encode($data); } else { $data = array( 'status'=>'failed', ); echo json_encode($data); } ?>