0

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

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

如何创建一个简单的下拉列表,例如“名称”和“距离”,选择时将使用 PHP 使用正确的排序查询重新加载页面?

4

3 回答 3

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

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

于 2012-11-26T17:50:08.360 回答
0

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

公平警告!

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

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

有关 SQL 注入的更多信息。

于 2012-11-26T17:49:57.970 回答
0

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

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

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

于 2012-11-26T17:51:50.140 回答