允许用户通过简单的下拉列表对MySQL结果进行排序

时间:2012-11-26 17:36:14

标签: php html

我创建了一个非常简单的CRUD,可以在我的数据库中查询酒店详细信息并将其显示在HTML表格中。

默认情况下,我的mysql查询按照创建顺序返回Hotels。我已经提出了一些不同的sql语句来按距离或A-Z返回结果,我希望用户选择他们喜欢的结果。

如何创建一个简单的下拉列表,例如“Name”和“Distance”,选中后会使用PHP使用正确的排序查询重新加载页面?

3 个答案:

答案 0 :(得分:1)

你的基本结构看起来像;

HTML;

<SELECT id="sort_select" onchange="javascript:re_sort();">
    //options
</SELECT>

Javascript功能;

function re_sort() {
    //make ajax call using sort_select value
    //refresh table contents
}

PHP;

if($_GET['sort_field'] == 'fish') {
    //execute fish sort sql
}
else if($_GET['sort_field'] == 'goat') {
    //execute goat sort sql
}
//return response

直接在sql查询中使用$_GET值,而是使用上面的结构。

答案 1 :(得分:0)

听起来很简单。您可以添加由下拉列表中的值填充的ORDER BY子句。

公平警告!

直接用户输入非常危险!准备好的语句不能用于ORDER BY值。您需要非常具有攻击性的白名单,请确保您收到的值是预定义值之一,这些值是从服务器上的某个位置获取的(数据库架构,或硬编码到PHP中)代码)即可。

永远不要让用户输入到达您的查询未经检查和取消确定!

<强> More information about SQL Injection.

答案 2 :(得分:0)

您需要使用处理更改事件和重新加载事件的JavaScript。但是,您也希望处理已禁用的JavaScript浏览器。你可以通过显示一个sumbit按钮并用JavaScript隐藏它来做到这一点。

就PHP而言,有几种方法可以解决它,但这是一个想法。将排序值存储到数组中。然后让索引成为一个数字,只是如果正确完成就不会发生SQL注入,因为我们不想允许纯SQL语句。当用户更改提交时。

在代码中有一个开关,并根据输入的数字将相应的SQL语句附加到它。