phphtmlsqldatagridjquery-easyui

Display all data when Date Range inputs are null


I have a Datagrid with a date range filter implemented, in which I have two date inputs, one for the 'fromDate' parameter and other for 'toDate' parameter, this allows me to display the data between both dates.

I would like to display all my data before applying any filters. The datagrid only allows me to display data when I apply the filters, or when I insert the 'toDate' parameter, otherwise, when both parameters are null, the datagrid won't display any data.

I've read another similar question to this one, but it didn't solve my problem: A single sql query which can handle both null or valued date range in sql server

Also, I've used other types of filters that seem to work normally even with null parameters.

Script:

<script type="text/javascript">

function doSearch(){
    $('#tt').datagrid('load',{
        fromDate: $('#fromDate').val(),
        toDate: $('#toDate').val(),          
    });
}
</script>

HTML:

 <table id="tt" class="easyui-datagrid" style="width:1000px;height:450px"
 url="datagrid24_getdata.php" sortName="id" sortOrder="asc"
 title="Search" iconCls="icon-search" toolbar="#tb" 
 rownumbers="true" pagination="true">
 <thead>
 <tr>
       <th field="id" width="50" sortable="true">ID</th>
       <th field="userName" width="250" sortable="true">Name</th>
       <th field="date" width="100" sortable="true">Date</th>
 </tr>
</thead>
</table>
<div id="tb" style="padding:3px">
<span> Insert filter Parameters:</span>
<!-- DATE RANGE FILTER -->
<input id="fromDate" type="date" style="line-height:26px;border:1px solid #ccc">
<input id="toDate" type="date" style="line-height:26px;border:1px solid #ccc">

<a href="#" class="easyui-linkbutton" plain="true" onclick="doSearch()">Search</a>
</div>

My PHP datagrid24_getdata.php:

<?php
include 'conectionbd.php';

$page = isset($_POST['page']) ? intval($_POST['page']) : 1;
$rows = isset($_POST['rows']) ? intval($_POST['rows']) : 10;
$sort = isset($_POST['sort']) ? strval($_POST['sort']) : 'id';
$order = isset($_POST['order']) ? strval($_POST['order']) : 'asc';
$offset = ($page-1)*$rows;
$result = array();

//HERE WE FETCH THE VALUES FROM THE FILTER INPUTS
$fromDate= isset($_POST['fromDate']) ? mysql_real_escape_string($_POST['fromDate']) : '';
$toDate= isset($_POST['toDate']) ? mysql_real_escape_string($_POST['toDate']) : '';

//THIS IS THE SQL QUERY I USE FOR THE DATE RANGE FILTER
$where = "date BETWEEN '$fromDate%' AND '$toDate%'";


$rs = mysql_query("select count(*) from table where " . $where);
$row = mysql_fetch_row($rs);
$result["total"] = $row[0];

$rs = mysql_query("select * from table where " . $where . " order by $sort $order limit $offset,$rows");

$items = array();
while($row = mysql_fetch_object($rs)){
array_push($items, $row);
}
$result["rows"] = $items;

echo json_encode($result);?>

I'd really appreciate any help!


Solution

  • You could do something like this (I don't know PHP that well, so the syntax to check for date values being null will probably need to be corrected):

    //THIS IS THE SQL QUERY I USE FOR THE DATE RANGE FILTER
    $where = '';
    // check if both the dates are not null
    if ($fromDate != null && $toDate != null) {
        $where = "where date BETWEEN '$fromDate%' AND '$toDate%'";
    } else if ($fromDate != null) {
        $where = "where date >= '$fromDate%'";
    } else if ($toDate != null) {
        $where = "where date <= '$toDate%'"; 
    }
    
    
    $rs = mysql_query("select count(*) from table " . $where);