Сортировка по цене с использованием ajax и php - PullRequest
1 голос
/ 22 мая 2019

Я создал страницу фильтрации продуктов, используя ajax и php для моего сайта по недвижимости.Сейчас я пытаюсь добавить опцию, чтобы упорядочить результаты по цене, но я не могу добавить эту последнюю часть кода SQL к запросу.Я знаю, что я должен также добавить значения как переменные, но все способы, которые я пробовал, либо откладывать другие фильтры, либо часть «ORDER BY» вообще не включены в запрос.Я бы даже был открыт, чтобы создать кнопку «Отправить» только для этой функции, но мне нужно, чтобы она как можно лучше взаимодействовала с остальной частью фильтрации.Я бы хотел немного помочь

<?php


//fetch_data.php

include('database_connection.php');

if(isset($_POST["action"]))
 $query = "SELECT * FROM Property Where PropertyID != 0 ";
 if(isset($_POST["minimum_price"], $_POST["maximum_price"]) && !empty($_POST["minimum_price"]) && !empty($_POST["maximum_price"]))
 {
  $query .= "AND Price BETWEEN '".$_POST["minimum_price"]."' AND '".$_POST["maximum_price"]."'";
 }

 if(isset($_POST["city"]))
 {
  $city_filter = implode("','", $_POST["city"]);
  $query .= "AND City IN('".$city_filter."')";
 }
 if(isset($_POST["sort"]))
 {
$query .= 'AND ORDER BY '.$_REQUEST['sort'];
 }


 $statement = $connect->prepare($query);
 $statement->execute();
 $result = $statement->fetchAll();
 $total_row = $statement->rowCount();
 $output = '';
 if($total_row > 0)
 {
  foreach($result as $row)
  {
   $output .= '
   <div class="col-sm-4 col-lg-3 col-md-3">
    <div style="border:1px solid #ccc; border-radius:5px; padding:16px; margin-bottom:16px; height:450px;">
     <img src="image/'. $row['Image'] .'" alt="" class="img-responsive" >
     <p align="center"><strong><a href="#">'. $row['Name'] .'</a></strong></p>
     <h4 style="text-align:center;" class="text-danger" >'. $row['Price'] .'</h4>
     <p>Property Type : '. $row['Property_Type'].' <br />
     <p>For : '. $row['Listing_Type'].' <br />
     <p>Living Area : '. $row['Living_area'].' <br />
     <p>City : '. $row['City'].' <br />

    </div>

   </div>
   ';
  }
 }
 else
 {
  $output = '<h3>No Data Found</h3>';
 }
 echo $output;

?>
<?php

//index.php

include('database_connection.php');

?>

<!DOCTYPE html>
<html lang="en">

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>Product filter in php</title>

    <script src="js/jquery-1.10.2.min.js"></script>
    <script src="js/jquery-ui.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link href = "css/jquery-ui.css" rel = "stylesheet">
    <!-- Custom CSS -->
    <link href="css/style.css" rel="stylesheet">
</head>

<body>
    <!-- Page Content -->
    <div class="container">
        <div class="row">
         <br />
         <h2 align="center">Product Filters in PHP</h2>
         <br />
            <div class="col-md-3">

              <select name='sort'>
                  <option id="ASC" value='ASC'> Price Low to High </option>
                  <option id="DESC" value='DESC'> Price High to Low </option>
              </select>


    <div class="list-group">
     <h3>Price</h3>
     <input type="hidden" id="hidden_minimum_price" value="0" />
                    <input type="hidden" id="hidden_maximum_price" value="3000000" />
                    <p id="price_show">1000 - 3000000</p>
                    <div id="price_range"></div>
                </div>


      <div class="list-group">
       <h3>City</h3>
       <?php
                      $query = "
                      SELECT DISTINCT(City) FROM Property WHERE Price !=1
                      ";
                      $statement = $connect->prepare($query);
                      $statement->execute();
                      $result = $statement->fetchAll();
                      foreach($result as $row)
                      {
                      ?>
                      <div class="list-group-item checkbox">
                          <label><input type="checkbox" class="common_selector city" value="<?php echo $row['City']; ?>"  > <?php echo $row['City']; ?> </label>
                      </div>
                      <?php
                      }
                      ?>
                  </div>




            </div>
            <div class="col-md-9">
             <br />
                <div class="row filter_data">

                </div>
            </div>
        </div>

    </div>
<style>
#loading
{
 text-align:center;
 background: url('loader.gif') no-repeat center;
 height: 150px;
}
</style>

<script>
$(document).ready(function(){

    filter_data();

    function filter_data()
    {
        $('.filter_data').html('<div id="loading" style="" ></div>');
        var action = 'fetch_data';
        var minimum_price = $('#hidden_minimum_price').val();
        var maximum_price = $('#hidden_maximum_price').val();
        var city = get_filter('city');



        $.ajax({
            url:"fetch_data.php",
            method:"POST",
            data:{action:action, minimum_price:minimum_price, maximum_price:maximum_price,  city:city},
            success:function(data){
                $('.filter_data').html(data);
            }
        });
    }

    function get_filter(class_name)
    {
        var filter = [];
        $('.'+class_name+':checked').each(function(){
            filter.push($(this).val());
        });
        return filter;
    }

    $('.common_selector').click(function(){
        filter_data();
    });

    $('#price_range').slider({
        range:true,
        min:1000,
        max:3000000,
        values:[1000, 3000000],
        step:500,
        stop:function(event, ui)
        {
            $('#price_show').html(ui.values[0] + ' - ' + ui.values[1]);
            $('#hidden_minimum_price').val(ui.values[0]);
            $('#hidden_maximum_price').val(ui.values[1]);
            filter_data();
        }
    });


});
</script>

</body>

</html>

1 Ответ

0 голосов
/ 22 мая 2019

У вас неправильная строка:

$query .= 'AND ORDER BY '.$_REQUEST['sort'];

Должно быть:

$query .= ' ORDER BY '.$_REQUEST['sort'];

Также вы можете добавить опцию для конкретного заказа ASC или DESC:

$query .= 'AND ORDER BY '.$_REQUEST['sort']. ' {$orderType}';

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...