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

Php 允许用户通过简单的下拉菜单对MySQL结果进行排序,php,html,Php,Html,我创建了一个非常简单的CRUD,用于查询我的数据库中的酒店详细信息,并将其显示在HTML表中 默认情况下,我的mysql查询按照创建酒店的顺序返回酒店。我已经提出了一些不同的sql语句来按距离或a-Z返回结果,我希望用户选择他们喜欢的结果 如何创建一个简单的下拉列表,例如“Name”和“Distance”,选中后将使用正确的PHP排序查询重新加载页面?听起来很简单。添加一个由下拉列表中的值填充的ORDER BY子句 公平的警告! 直接用户输入是非常危险的!并且,准备好的语句不能用于ORDER B

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

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


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

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

公平的警告! 直接用户输入是非常危险的!并且,准备好的语句不能用于ORDER BY值。您需要非常积极的白名单,确保您收到的值是从服务器上的某个地方获取的预定义值之一(数据库模式或硬编码到PHP代码中)

永远不要让用户输入未经检查和初始化就到达您的查询!

您的基本结构将是:

HTML

PHP


不要在sql查询中直接使用
$\u GET
值,而是使用上面的结构。

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

就PHP而言,有几种方法可以实现它,但这里有一个想法。将排序值存储到数组中。然后将索引设为一个数字,这样如果操作正确,SQL注入就不会发生,因为我们不希望允许使用纯SQL语句。当用户更改时,提交它


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

这是一个mysql问题吗?您可能想重新标记此问题。那么您在服务器上使用的是什么语言?。。。你的问题是什么?听起来你已经有了所有需要的部分…只需在下拉列表中添加一个“onchange”或“sort”按钮,然后用字段名重新查询页面。我认为这实际上只是一个HTML/DOM问题
<SELECT id="sort_select" onchange="javascript:re_sort();">
    //options
</SELECT>
function re_sort() {
    //make ajax call using sort_select value
    //refresh table contents
}
if($_GET['sort_field'] == 'fish') {
    //execute fish sort sql
}
else if($_GET['sort_field'] == 'goat') {
    //execute goat sort sql
}
//return response