How to Add Custom Filter in DataTable using Ajax in PHP?

03-Apr-2023

.

Admin

How to Add Custom Filter in DataTable using Ajax in PHP?

Hi friends,

I am going to explain you How to add Custom Filter in DataTable using Ajax in PHP?. You will learn how to add custom filter in datatable – ajax and php.

This article will give you How to filter data table column using custom filer - php. We will see how to add custom filter in datatable.

I will give you simple Example of How to add custom filter in DataTable Ajax and PHP?.

So, let's see bellow solution:

connection.php


<?php

$connect = new PDO("mysql:host=localhost;dbname=aatman", "root", "root");

?>

index.php

<?php

include('connection.php');

$country = '';

$query = "SELECT DISTINCT country FROM students ORDER BY country ASC";

$statement = $connect->prepare($query);

$statement->execute();

$result = $statement->fetchAll();

foreach($result as $row){

$country .= '<option value="'.$row['country'].'">'.$row['country'].'</option>';

}

?>

<html>

<head>

<title>How to Add Custom Filter in DataTable using Ajax in PHP?</title>

<link rel="stylesheet" href="https://cdn.datatables.net/1.11.5/css/dataTables.bootstrap5.min.css" />

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

<script src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js"></script>

<script src="https://cdn.datatables.net/1.11.5/js/dataTables.bootstrap5.min.js"></script>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>

</head>

<body>

<div class="container mt-4">

<div class="card">

<div class="card-header">

<h1 class="text-center">How to Add Custom Filter in DataTable using Ajax in PHP? - Nicesnippets.com</h1>

</div>

<div class="card-body">

<div class="row d-flex justify-content-center mb-4">

<div class="col-md-4">

<select name="filter_gender" id="filter_gender" class="form-control" required>

<option value="">Select Gender</option>

<option value="Male">Male</option>

<option value="Female">Female</option>

</select>

</div>

<div class="col-md-4">

<select name="filter_country" id="filter_country" class="form-control" required>

<option value="">Select Country</option>

<?php echo $country; ?>

</select>

</div>

<div class="col-md-2">

<button type="button" name="filter" id="filter" class="btn btn-success"><i class="fa fa-search" aria-hidden="true"></i> Search</button>

</div>

</div>

<table id="customer_data" class="table table-bordered table-striped mt-4">

<thead>

<tr>

<th width="20%">Customer Name</th>

<th width="10%">Gender</th>

<th width="25%">Address</th>

<th width="15%">City</th>

<th width="15%">Postal Code</th>

<th width="15%">Country</th>

</tr>

</thead>

</table>

</div>

</div>

</div>

</body>

</html>

<script type="text/javascript" language="javascript" >

$(document).ready(function(){

fill_datatable();

function fill_datatable(filter_gender = '', filter_country = ''){

var dataTable = $('#customer_data').DataTable({

"processing" : true,

"serverSide" : true,

"order" : [],

"searching" : false,

"ajax" : {

url:"fetch.php",

type:"POST",

data:{

filter_gender:filter_gender, filter_country:filter_country

}

}

});

}

$('#filter').click(function(){

var filter_gender = $('#filter_gender').val();

var filter_country = $('#filter_country').val();

if(filter_gender != '' && filter_country != ''){

$('#customer_data').DataTable().destroy();

fill_datatable(filter_gender, filter_country);

}else{

alert('Select Both filter option');

$('#customer_data').DataTable().destroy();

fill_datatable();

}

});

});

</script>

fetch.php

<?php

include('connection.php');

$column = array('first_name', 'gender', 'address', 'city', 'postalcode', 'country');

$query = "SELECT * FROM students ";

if(isset($_POST['filter_gender'], $_POST['filter_country']) && $_POST['filter_gender'] != '' && $_POST['filter_country'] != '')

{

$query .= 'WHERE gender = "'.$_POST['filter_gender'].'" AND country = "'.$_POST['filter_country'].'" ';

}

if(isset($_POST['order']))

{

$query .= 'ORDER BY '.$column[$_POST['order']['0']['column']].' '.$_POST['order']['0']['dir'].' ';

}else {

$query .= 'ORDER BY id DESC ';

}

$query1 = '';

if($_POST["length"] != -1)

{

$query1 = 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];

}

$statement = $connect->prepare($query);

$statement->execute();

$number_filter_row = $statement->rowCount();

$statement = $connect->prepare($query . $query1);

$statement->execute();

$result = $statement->fetchAll();

$data = array();

foreach($result as $row)

{

$sub_array = array();

$sub_array[] = $row['first_name'];

$sub_array[] = $row['gender'];

$sub_array[] = $row['address'];

$sub_array[] = $row['city'];

$sub_array[] = $row['postalcode'];

$sub_array[] = $row['country'];

$data[] = $sub_array;

}

function count_all_data($connect)

{

$query = "SELECT * FROM students";

$statement = $connect->prepare($query);

$statement->execute();

return $statement->rowCount();

}

$output = array(

"draw" => intval($_POST["draw"]),

"recordsTotal" => count_all_data($connect),

"recordsFiltered" => $number_filter_row,

"data" => $data

);

echo json_encode($output);

?>

Output:

I hope it will help you.....

#PHP