javascript - 从动态选择框构造 mySQL 查询

标签 javascript php jquery mysql

我已经能够使用选择框构建 mySQL 查询。像这样从 ajax 开始到 PHP。

html/js(相关部分)

var call = true;
  switch(parseInt($(this).val())) {
    case 1:
   cat_code ="ager";
        sortv = "database_percent";
        sorto = "asc";
    break;
    case 2:
   cat_code ="ager";
        sortv = "database_percent";
        sorto = "desc";
    break;
    default:
     cat_code ="ager";
        sortv = "value";
        sorto = "asc";

    break;
}
if(call) {
$.ajax({
        url: 'all_get_2.php',
        type: 'GET',
        dataType: 'JSON',
        data: {cat_code: cat_code, sortvalue: sortv ,sortorder:sorto},
        success: function(data) {
//stuff
}
})

PHP(相关部分...只是一个例子)

$whereCategory = isset($_GET['cat_code'])? "{$_GET['cat_code']}" : '';
$sortvalue = isset($_GET['sortvalue'])? "{$_GET['sortvalue']}" : '';
$sortorder = isset($_GET['sortorder'])? "{$_GET['sortorder']}" : '';
$sql = "select count(guid) from full_db2 where '{$whereCategory}' = '{$sortvalue}'' and example = '{$sortorder};";

$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
header('Content-type: application/json');
echo json_encode($result);

一切顺利。我在这个插图中混淆了一些变量,但这不是问题所在。这将返回用户从 selects 中选择的属性的计数。选择是根据用户在之前的选择中选择的内容动态生成的。

如果我希望用户能够选择更多属性以添加到查询中,该怎么办?因此,例如,与其查找数据库(用户)中年龄超过 40 岁的条目数,他们可以添加更多信息,例如年龄超过 40 岁且已婚并有 child 的用户。

我基本上考虑添加一个选项来添加另一组选择框(例如,单击“+”并出现新的一组),但我很快意识到我无法弄清楚那里有多少选择以及创建查询的逻辑方法。

允许用户选择(理论上)无限数量的属性以在单个 mySQL 查询中构建的最佳方法是什么?

最佳答案

我会使用 HTML <select> & <option>标记以显示各种 SQL 条件运算符 ( AND, OR, >, <, =, != ) 以及您的字段/表名称,然后将它们连接在一起以构建您的查询。

如评论中所述,您可以利用 name="checkbox[]" 等数组功能并将其作为 HTML 表单(POST 或 GET)提交以简化连接。

您需要转义并清理发送到数据库的任何内容,以避免 SQL 注入(inject),因为 HTML 页面可以在客户端进行编辑。如果不进行清理,精明的用户将可以访问您的整个数据库。这可以像验证数组内容是否与实际表名或条件运算符之一匹配一样简单,如果不匹配则丢弃。使用 mysqli::escape_string 转义( http://php.net/manual/en/mysqli.real-escape-string.php ) 也是一个好主意。

关于javascript - 从动态选择框构造 mySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27931177/

相关文章:

javascript - 接收带有键入文本效果的即时 chatgpt 响应

php - 如何从多个 mysql 列中选择不同的值并将它们放入一个 PHP 数组中?

javascript - 照片网格就像新的 flickr 设计

jquery - 当用户将文本拖放到文本框中时,如何使用 JQuery 检测值更改事件?

javascript - FadeOut 元素到 FadeIn 另一个与 CSS 动画相同的地方

javascript - 在固定按钮上拖动滚动条

javascript - 使用 Nginx 在刷新 404 上部署后创建 React 应用程序中断

javascript - 我如何在 javascript 中包含这些节点的循环

php - 如何在特定用户登录时显示工厂

javascript - 将 SVG 转换为 jQuery 函数