我创建了一个非常简单的 CRUD,它可以查询我的数据库以获取酒店详细信息并将它们显示在 HTML 表中。
默认情况下,我的 mysql 查询按照酒店的创建顺序返回酒店。我想出了一些不同的 sql 语句来按距离或 AZ 返回结果,我希望用户选择他们喜欢的。
如何创建一个简单的下拉列表,例如“名称”和“距离”,选择时将使用 PHP 使用正确的排序查询重新加载页面?
您的基本结构将如下所示;
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
不要$_GET
在sql查询中直接使用值,而是使用上面的结构。
听起来很简单。您添加一个ORDER BY
由下拉列表中的值填充的子句。
直接用户输入是非常危险的!并且准备好的语句不能用于ORDER BY
值。您需要非常积极的白名单,确保您收到的值是预定义值之一,这些值是从服务器上的某处获取的(数据库模式,或硬编码到 PHP 代码中)。
您将需要使用处理更改事件和重新加载事件的 JavaScript。但是,您也需要处理禁用的 JavaScript 浏览器。您可以通过显示一个 sumbit 按钮并使用 JavaScript 隐藏它来做到这一点。
就 PHP 而言,有几种方法可以处理它,但这里有一个想法。将排序值存储到数组中。然后让索引是一个数字,这样如果操作正确,就不会发生 SQL 注入,因为我们不想允许纯 SQL 语句。当用户更改时提交。
在代码中有一个开关,并根据输入的数字向其附加适当的 SQL 语句。