价格低 - 高/高 - 低过滤PHP / Mysql

时间:2013-04-18 18:50:19

标签: php html mysql filter

我正在寻找一种方法来创建一个过滤器(选择下拉菜单),根据价格选择我的产品。

我知道使用这样的查询完全可以:

SELECT * FROM products ORDER BY price ASC 
SELECT * FROM products ORDER BY price DESC 


但问题是我不想将GETS传递给url来选择查询。

是否可以执行jquery命令来填充结果?

这是我的选择:

<select name="filter">
<option value="lowHigh">Price: low - High</option>
<option value="highLow">Price: High - Low</option>
</select>

提前致谢。

4 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要在不使用get参数的情况下下拉更改时在表格或页面中的某处填充数据。

如果那样你需要一些叫做 ajax 的东西。由于您提到了 JQuery ,因此jquery中内置了 ajax 功能。

$.ajax({
   type: 'post',
   url: URL_TO_YOUR_PHP_SCRIPT,
   data: {
      priceFilter: $('#filter').val()
   },
   dataType: 'json',
   success: function(result) {
      if (result) {
         $.each(result, function(i, item) {
            $('#your_table').append('<tr><td>'+item+'</td></tr>');
         }
      }
   }
});

你的php脚本:

$pricefilter = $_POST['priceFilter']; //assuming you testing if its set
$pricefilter = $pricefilter == 'lowHigh' ? 'ASC' : 'DESC';

$query = "SELECT * FROM products ORDER BY price $pricefilter";
$data = $query->fetchAll(); 
//Or whatever you are using MySQL or PDO (please dont use MySQL_* functions)

echo json_encode($data);

答案 1 :(得分:1)

我认为没有理由不通过GET传递这种查询。 注入/ XSS仍然是不可能的,因为只有两个选项,用户无法添加他/她自己的信息。这正是eBay,亚马逊等网站所做的。只需像其他响应者建议的那样定义一个get变量。它非常安全,我推荐它。 如果您希望使用它来保存用户不刷新,请使用ajax - 默认情况下在jQuery中实现。

来自html:

<select id="filter">
<option value="lowHigh">Price: low - High</option>
<option value="highLow">Price: High - Low</option>
</select>

使用jQuery:

$("#filter").change(function() {
    //Whatever ajax you wish to use
});

答案 2 :(得分:1)

由于我收到了你们的帮助,我成功地完成了我的脚本! (特别感谢FunKy) 看看这段javascript,我完全理解它现在的功能。谢谢你的教训!
这是最后的脚本:

$("#filter").change(function() {
//Whatever ajax you wish to use
location.href = URL + 'index.php?action=over-ons&filter=' + $("#filter option:selected").val();
});

答案 3 :(得分:0)

jQuery脚本仍然必须将某些内容传递给服务器端脚本以执行SELECT。没有什么可以阻止你做以下事情:

<?php

$sort_dir = (isset($_GET['sort']) && $_GET['sort'] == 'desc') ? 'desc' : 'asc';

$sql = "SELECT * FROM products ORDER BY price $sort_dir";