0

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

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

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

4 回答 4

1

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

如果是这样,你需要一些叫做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);
于 2013-04-18T18:55:17.510 回答
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
});
于 2013-04-18T18:56:45.387 回答
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();
});
于 2013-04-18T19:24:36.997 回答
0

jQuery 脚本仍然需要向服务器端脚本传递一些东西来执行SELECT. 没有什么可以阻止您执行以下操作:

<?php

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

$sql = "SELECT * FROM products ORDER BY price $sort_dir";
于 2013-04-18T18:56:04.573 回答