How to filter product price range using checkbox?

Milind Bhuvad
Milind Bhuvad used Ask the Experts™
on
I created product price filter using checkbox in php. I have 3 price range 2000-3000, 3000-4000, 4000-5000. If user click one checkbox its work, but user click more than one checkbox getting error (Notice: Trying to get property of non-object in D:\xamp\htdocs\aasopalav\controller\filter_saree.php on line 45).

here is my forntend code
<ul class="list-style-6 margin-50px-bottom text-small">
      <li><input type="checkbox" value="2000 AND 3000" class="item_filter price">2000 - 3000</li>
      <li><input type="checkbox" value="3000 AND 4000" class="item_filter price">3000 - 4000</li>
      <li><input type="checkbox" value="4000 AND 5000" class="item_filter price">4000 - 5000</li>
</ul>

and here is my back end code to filter
<?php
    $price="";
   $price = isset($_REQUEST['price'])?$_REQUEST['price']:"";

   $sql = "SELECT * FROM wm_products WHERE pro_live='N'";
            if(!empty($price)){
                  $price =implode("','",$price);
                  $sql  .= " and pro_price between $price";
            }

$result = $conn->query($sql);
      if($result->num_rows > 0){
            while($row = $result->fetch_assoc()){
                ?>
                       .........result which checkbox selected
                <?php
               }
        }
?>

In sort my select query created like this ( SELECT * FROM `wm_products` WHERE pro_live='N' AND pro_price BETWEEN 2000 AND 3000, 4000 AND 5000 )
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Hi Milind,

CheckBoxes allow you to check more than one.  Unless you take steps to manage what happens when more 1 are selected you can get odd behavior like you're seeing now.

Perhaps you want radio buttons, where only 1 button at a time can be selected?
Co-Founder and Chief Architect
Top Expert 2016
Commented:
Your query has bad syntax:

AND pro_price BETWEEN 2000 AND 3000, 4000 AND 5000

Open in new window


If you're letting people select multiple boxes you can just append another OR clause rather than a comma separation.  You should wrap that in parenthesis.  So:

Examples:

AND (pro_price BETWEEN 2000 AND 3000
OR pro_price BETWEEN 4000 AND 5000)

Open in new window


AND (pro_price BETWEEN 2000 AND 3000
OR pro_price BETWEEN 3000 AND 5000
OR pro_price BETWEEN 4000 AND 5000)

Open in new window

Milind BhuvadPHP Developer

Author

Commented:
But how can implode checkbox value for between systax for this query

AND (pro_price BETWEEN 2000 AND 3000
OR pro_price BETWEEN 3000 AND 5000
OR pro_price BETWEEN 4000 AND 5000)

My query is

$sql = "SELECT * FROM wm_products WHERE ";
if(!empty($price)){
      $price =implode("','",$price);
      $sql  .= " and pro_price between $price";
}
Dustin SaundersCo-Founder and Chief Architect
Top Expert 2016

Commented:
You would just need to look at all the check boxes, and run through a for loop.

If the box is checked, add to the conditions.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial