我创建了一个非常简单的CRUD,可以在我的数据库中查询酒店详细信息并将其显示在HTML表格中。
默认情况下,我的mysql查询按照创建顺序返回Hotels。我已经提出了一些不同的sql语句来按距离或A-Z返回结果,我希望用户选择他们喜欢的结果。
如何创建一个简单的下拉列表,例如“Name”和“Distance”,选中后会使用PHP使用正确的排序查询重新加载页面?
答案 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中)代码)即可。
答案 2 :(得分:0)
您需要使用处理更改事件和重新加载事件的JavaScript。但是,您也希望处理已禁用的JavaScript浏览器。你可以通过显示一个sumbit按钮并用JavaScript隐藏它来做到这一点。
就PHP而言,有几种方法可以解决它,但这是一个想法。将排序值存储到数组中。然后让索引成为一个数字,只是如果正确完成就不会发生SQL注入,因为我们不想允许纯SQL语句。当用户更改提交时。
在代码中有一个开关,并根据输入的数字将相应的SQL语句附加到它。