0

I´m using the jquery based table plugin "datatables" and I´m trying to implement an ajax based "range search" between two numbers ("start-date" and "end_date"). These entered values should be used for a query in the MySQL column "order_id".

On the server-sided script (fetch.php) I catch the both values like that.

if(isset($_POST['start_date'], $_POST['end_date'])) {
         $query .= 'order_id BETWEEN "'.$_POST["start_date"].'" AND "'.$_POST["end_date"].'" AND ';
 }

The problem is I can´t see any errors in the console, but after using the number range search no results are displayed.

The "category select menus" (category and category2) are working as expected.

I´ve setted up a test site, maybe you can help me to find the error: Testsite

This is my script:

$(document).ready(function () {
    var category = "";
    var category2 = "";
    var start_date = "";
    var end_date = "";

    load_data();

    function load_data(is_category, is_category2, start_date, end_date) {
        console.log(is_category, is_category2, start_date, end_date);
        var dataTable = $('#product_data').DataTable({
            "processing": true,
            "serverSide": true,
            "order": [],
            "ajax": {
                url: "fetch.php",
                type: "POST",
                data: {
                    is_category: is_category,
                    is_category2: is_category2,
                    start_date: start_date,
                    end_date: end_date
                },
            }
        });
    }

    // Number Range Search

    $('#search').click(function () {
        console.log($(this).attr('id'), start_date, end_date)
        var start_date = $('#start_date').val();
        var end_date = $('#end_date').val();
        if (start_date != '' && end_date != '') {
            $('#product_data').DataTable().destroy();
            load_data('','',start_date, end_date);
        }
        else {
            alert("Both Date is Required");
        }
    });

    // Select Menu id="category"

    $(document).on('change', '#category, #category2', function () {
        //console.log($(this).attr('id'), category, category2)
        if ($(this).attr('id') === "category") {
            category = $(this).val();
        } else if ($(this).attr('id') === "category2") {
            category2 = $(this).val();
        }
        // 
        $('#product_data').DataTable().destroy();
        if (category != '') {
            load_data(category, category2);
        }
        else {
            load_data();
        }
    });

    // Select Menu id="category2"

    $(document).on('change', '#category2', function () {
        var category2 = $(this).val();
        $('#product_data').DataTable().destroy();
        if (category2 != '') {
            load_data(category, category2);
        }
        else {
            load_data();
        }
    });

});

fetch.php

//fetch.php
$connect = mysqli_connect("localhost", "xxxxx", "xxxxx", "xxxxx");
$columns = array('order_id', 'order_customer_name', 'order_item', 'order_value', 'order_date');

$query = "SELECT * FROM tbl_order WHERE ";

if(isset($_POST['start_date'], $_POST['end_date']))
{
 $query .= 'order_id BETWEEN "'.$_POST["start_date"].'" AND "'.$_POST["end_date"].'" AND ';
}


if(isset($_POST["is_category"]))
{
 $query .= "order_item = '".$_POST["is_category"]."' OR ";
}

if(isset($_POST["is_category2"]))
{
 $query .= "order_customer_name = '".$_POST["is_category2"]."' AND ";
}

if(isset($_POST["search"]["value"]))
{
 $query .= '
  (order_id LIKE "%'.$_POST["search"]["value"].'%" 
  OR order_customer_name LIKE "%'.$_POST["search"]["value"].'%" 
  OR order_item LIKE "%'.$_POST["search"]["value"].'%" 
  OR order_value LIKE "%'.$_POST["search"]["value"].'%")
 ';
}

if(isset($_POST["order"]))
{
 $query .= 'ORDER BY '.$columns[$_POST['order']['0']['column']].' '.$_POST['order']['0']['dir'].' 
 ';
}
else
{
 $query .= 'ORDER BY order_id DESC ';
}

$query1 = '';

if($_POST["length"] != -1)
{
 $query1 = 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
}

$number_filter_row = mysqli_num_rows(mysqli_query($connect, $query));

$result = mysqli_query($connect, $query . $query1);

$data = array();

while($row = mysqli_fetch_array($result))
{
 $sub_array = array();
 $sub_array[] = $row["order_id"];
 $sub_array[] = $row["order_customer_name"];
 $sub_array[] = $row["order_item"];
 $sub_array[] = $row["order_value"];
 $sub_array[] = $row["order_date"];
 $data[] = $sub_array;
}

function get_all_data($connect)
{
 $query = "SELECT * FROM tbl_order";
 $result = mysqli_query($connect, $query);
 return mysqli_num_rows($result);
}

$output = array(
 "draw"    => intval($_POST["draw"]),
 "recordsTotal"  =>  get_all_data($connect),
 "recordsFiltered" => $number_filter_row,
 "data"    => $data
);

echo json_encode($output);

1 Answer 1

1

Thats because the is_category and is_category2 are returning 0. You have probably an if statement on your php like if $_POST[is_category] but you also need to do the same in case there is no category selected. Please share the full php to help you out

on your click function replace load_data(start_date, end_date); with load_data('','',start_date, end_date);

Sign up to request clarification or add additional context in comments.

5 Comments

Thanks for your help. I´ve edit my initial post with the complete fetch.php. You´re right with the if statement I think.
I think i got it. on your click function replace load_data(start_date, end_date); with load_data('','',start_date, end_date);
I´ve replaced it on the testsite, but no changes. Do I have to change something in the if statements too?
Now it works. I had to change the "and" to "or" in the query. And with your replacement it works perfectly now. Thank you!
great news ... :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.