Today I will explain how to add codeigniter advanced search functionality implementation, here I am taking auto sales advanced search example.

Now I will create view page as search_view.php, now add search tabs using html and css
in view page.

Now create two tables as State_cities and make_models to display content dynamically in search_view.php page

<?php
$sqlstate="select distinct  state_name from State_cities ";
$querystate=$this->db->query($sqlstate);
$sqlmake="select distinct  make_name from make_models ";
$querymake=$this->db->query($sqlmake);
?>
<div class="bs-example">
<div class="panel-group">
<div class="panel panel-default bdrw10" >
<div class="panel-heading pdg0" data-toggle="collapse" data-parent="#accordion7" href="#collapseSeven">
<h4 class="panel-title head  innerHead">
<a data-toggle="collapse" data-parent="#accordion7" href="#collapseSeven">State and City</a>
</h4>
</div>
<div id="collapseSeven" class="panel-collapse collapse">
<div class="panel-body">
<select class="form-control" id="states" name="states"  onchange="selctcitys();viewSearch()">
<?php
if($state!='')
{
?>
<option value="<?=$state?>"  ><?=$state?> </option>
<script type="text/javascript">
selctcitys();
</script>
<?php
}
else
{?>
<option value="">--Select State-- </option>
<?php
}?>
<?php
foreach($querystate->result() as $row)
{
?>
<option value="<?php  echo $row->state_name; ?>"><?php  echo $row->state_name; ?> </option>
<?php
}
?>
</select><br/>
<select class="form-control" id="cities" name="cities"  onchange="viewSearch()">
<?php
if($city!='')
{
?>
<option value="<?=$city?>"><?=$city?> </option>
<?php
}
else
{?>
<option value="">--Select City-- </option>
<?php
}?>
</select>
</div>
</div>
</div>
<div class="panel panel-default bdrw10" >
<div class="panel-heading pdg0">
<h4 class="panel-title  head  innerHead">
<a data-toggle="collapse" data-parent="#accordion8" href="#collapseEight">Make and Model</a>
</h4>
</div>
<div id="collapseEight" class="panel-collapse collapse">
<div class="panel-body">
<select class="form-control" id="makes" name="makes"  onchange="selctmakemain();viewSearch()">
<?php
if($make!='')
{
?>
<option value="<?=$make?>"><?=$make?> </option>
<?php
}
else
{?>
<option value="">--Select Make-- </option>
<?php
}?>
<?php
foreach($querymake->result() as $row)
{
?>
<option value="<?php  echo $row->make_name; ?>"><?php  echo $row->make_name; ?> </option>
<?php
}
?>
</select><br/>
<select class="form-control" id="model" name="model"  onchange="viewSearch()">
<?php
if($model!='')
{
?>
<option value="<?=$model?>"><?=$model?> </option>
<?php
}
else
{?>
<option value="">--Select Model-- </option>
<?php
}?>
</select>
</div>
</div> 
</div>
<div class="panel panel-default bdrw10" >
<div class="panel-heading pdg0" data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
<h4 class="panel-title head  innerHead">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne"> Your Budget</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse">
<div class="panel-body">
<input type="checkbox" name="Budget[]" onClick="viewSearch()" value="1 and 100000"  /> Up to 1 lakh<br/>
<input type="checkbox" name="Budget[]"   onClick="viewSearch()" value="100000 and 300000"/> 1-3 lakhs<br/>
<input type="checkbox" name="Budget[]"  onClick="viewSearch()" value="300000 and 500000" /> 3-5 lakhs<br/>
<input type="checkbox" name="Budget[]"  onClick="viewSearch()" value="500000 and 800000"  /> 5-8 lakhs<br/>
<input type="checkbox" name="Budget[]"  onClick="viewSearch()"  value="800000 and 1000000"/> 8-10 lakhs<br/>
<input type="checkbox" name="Budget[]"  onClick="viewSearch()"  value="1000000 and 1500000"/> 10-15 lakhs<br/>
<input type="checkbox" name="Budget[]"   onClick="viewSearch()" value="1500000 and 2000000"/> 15-20 lakhs<br/>
<input type="checkbox" name="Budget[]"   onClick="viewSearch()" value=" > 2000000"/> 20 lakhs or above
</div>
</div>
</div>
<div class="panel panel-default bdrw10" data-parent="#accordion5">
<div class="panel-heading pdg0" data-toggle="collapse" data-parent="#accordion5" href="#collapseFour">
<h4 class="panel-title head  innerHead">
<a data-toggle="collapse" data-parent="#accordion5" href="#collapseFour">Body Style</a>
</h4>
</div>
<div id="collapseFour" class="panel-collapse collapse">
<ul class="panel-body li_none">
<li>
<div class="fleft wid50p">
<span class="clear fleft row1"><i class="bodyset cset2 flt-left"> </i> </span>
<span class="fleft row1 mgnl10"> <input type="checkbox" value="Hatchback" name="bodyStyle[]"  onClick="viewSearch()" id="bodyStyle" /> Hatchback </span>
</div>
<div class="fleft wid50p">
<span class="clear disin"><i class="bodyset cset1 flt-left"> </i> </span>
<span class="disin row1 mgnl10">  <input type="checkbox" value="Sedan" name="bodyStyle[]" onClick="viewSearch()" /> Sedan  </span>
</div>
</li>
<li>
<div class="fleft wid50p">
<span class="clear disin"><i class="bodyset cset3 flt-left"> </i> </span>
<span class="disin row1 mgnl10">  <input type="checkbox" value="Convertible" name="bodyStyle[]" onClick="viewSearch()" /> Convertible </span>
</div>
</li>
<li>
<div class="fleft wid50p">
<span class="clear disin"><i class="bodyset cset5 flt-left"> </i></span>
<span class="disin row1 mgnl10">  <input type="checkbox" value="SUV" name="bodyStyle[]" onClick="viewSearch()" /> SUV/MUV </span>
</div>
</li>
</li>
<li>
<div class="fleft wid50p">
<span class="clear disin"><i class="bodyset cset6 flt-left"> </i> </span>
<span class="disin row1 mgnl10"> <input type="checkbox" value="VANS" name="bodyStyle[]"  onClick="viewSearch()"/> Vans  </span>
</div>
</li>  
</ul>
</div>
</div>
<div class="panel panel-default bdrw10" data-parent="#accordion1">
<div class="panel-heading pdg0" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo">
<h4 class="panel-title head  innerHead">
<a data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo">Fuel Type</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse">
<div class="panel-body">
<input type="checkbox" name="fueltype[]" onClick="viewSearch()" value="Petrol"  /> Petrol<br/>
<input type="checkbox" name="fueltype[]"  onClick="viewSearch()" value="CNG"/> CNG<br/>
<input type="checkbox" name="fueltype[]"   onClick="viewSearch()"  value="Electric"/> Electric<br/>
<input type="checkbox" name="fueltype[]"   onClick="viewSearch()"  value="Diesel" /> Diesel<br/>
<input type="checkbox" name="fueltype[]"   onClick="viewSearch()"  value="LPG" /> LPG
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
function viewSearch()
{
var states=$('#states').val();
var make=$('#makes').val();
var model=$('#model').val();
var cities=$('#cities').val();
var budgetarr= new Array();
$('input[name="Budget[]"]:checked').each(function() {
budgetarr.push(this.value);
});
var fuelarr=new Array();
$('input[name="fueltype[]"]:checked').each(function() {
fuelarr.push(this.value);
});
var sellerarr=new Array();
$('input[name="sellerinfo[]"]:checked').each(function() {
sellerarr.push(this.value);
});
var tarnsArr=new Array();
$('input[name="TransmissionType[]"]:checked').each(function() {
tarnsArr.push(this.value);
});
var bodyarr= new Array();
$('input[name="bodyStyle[]"]:checked').each(function() {
bodyarr.push(this.value);
});
var bodystr=bodyarr;
$.post("<?php echo base_url();?>searchcon/advSearch",
{
bodyStyle : bodyarr,
budget : budgetarr,
fuelType : fuelarr,
cities : cities,
states : states,
make  : make,
model : model
},
function(data) 
{
$('#searchre').html(data);
});	
}
function selctcitys()
{
var state=$('#states').val();
$.post('<?php echo base_url();?>searchcon/citydetailswithstate/',
{
state:state
},
function(data) 
{
$('#cities').html(data);
});	
}
function selctmakemain()
{
var make=$('#makes').val();
$.post('<?php echo base_url();?>searchcon/modeldetailswithmake/',
{
make:make
},
function(data) 
{
$('#model').html(data);
});	
}
</script>

Step 1: In first step I will get state and city values by populating dropdown box using JavaScript onchange function selctcitys().
It will call controller function and return the data to success function in JavaScript to display result in html .
Step 2: In second step I will get make and model values by populating drop down box using javascript onchange function selctmakemain(),It will call controller function and return the data to html .
Step 3:In third step I will get the check box value using array ,if it is checked then JavaScript onclick function viewSearch() fire,here I am storing the value and passing to
Controller function to get best and accurate results to display in results view.
Now we will see the controller functions for above discussed functions.

<?php
class searchcon extends CI_Controller{
public $data;
public function advSearch()
{
$query = "";
$bodyStyle=$this->input->post("bodyStyle");
$fuelType=$this->input->post("fuelType");
$cities=$this->input->post("cities");
$states=$this->input->post("states");
$make =$this->input->post("make");
$model =$this->input->post("model");
$budgetarr=$this->input->post("budget");
$sql_query="select  * from userorsellcar";
if(!empty($budgetarr))
{
foreach($budgetarr as $key=>$value){
if($value == " > 2000000")
{
$pricearr[]=' price '.$value.'';
}
else
{
$pricearr[]=' price between '.$value.'';
}
}
$price=implode(' or ', $pricearr);
$query[]= ' ('.$price.')';
}
if(!empty($cities))
{
$comma = "'".$cities."'"; 
$query[]=' city='.$comma.'';
}
if(!empty($states))
{
$comma = "'".$states."'"; 
$query[]=' state='.$comma.'';
}
if(!empty($make))
{
$comma = "'".$make."'"; 
$query[]=' make='.$comma.'';
}
if(!empty($model))
{
$comma = "'".$model."'"; 
$query[]=' model='.$comma.'';
}
if(!empty($bodyStyle))
{
$comma_separated=implode("','", $bodyStyle);
$comma = "'".$comma_separated."'"; 
$query[]=' bodystyle in ('.$comma.')';
}
if(!empty($fuelType))
{
$comma_separated=implode("','", $fuelType);
$comma = "'".$comma_separated."'"; 
$query[]=' fueltype in ('.$comma.')';
}
if(!empty( !empty($fuelType)|| !empty($bodyStyle) || !empty($cities) || !empty($budgetarr) || !empty($states)  || !empty($make)  || !empty($model))
{
$where_clause = implode(' and ', $query);
$sql_query.=" where".$where_clause." order by created_date asc";
}
$data['query']=$this->db->query($sql_query);
/*Note:Here In the example I did not created display search_usedcar view,please create a create view as you like to display the results by echoing the view directly to display results  */      
echo $this->load->view("user/search_usedcar_ads",$data);
}
function citydetailswithstate()
{
$state=$this->input->post('state');
//echo $state;
$query=$this->user_service->get_city_info();
echo '<option value="">Select City </option>';
foreach($query->result() as $row)
{ 
echo "<option value='".$row->city_name."'>".$row->city_name."</option>";
}
}
function modeldetailswithmake()
{
$make=$this->input->post('make');
//echo $state;
$query=$this->user_service->get_model_info();
echo '<option value="">--Select model-- </option>';
foreach($query->result() as $row)
{ 
echo "<option value='".$row->model."'>".$row->model."</option>";
}
}
}
?>

Thanks for reading this article.