【问题标题】:How to create an AND button that adds a AND statement to a query?如何创建一个将 AND 语句添加到查询的 AND 按钮?
【发布时间】:2016-06-14 08:46:39
【问题描述】:

我正在制作某种类型的查询构建器,我想实现一个按钮来向我的查询添加 AND 语句。我制作了一个版本,其中实现了 1 个 AND 语句,但它有点曲折,我希望用户能够执行多个 AND 语句。这是我目前拥有的代码。

已更新这是我的 .php 文件:

   <?php

include "connect.php";

//Ophalen van de waarden uit de tabel(len) en veld(en) 
$table          = $_GET['tableSelected'];
$field          = $_GET['fieldSelected'];
$attribute      = $_GET['attributeSelected'];
$operator       = $_GET['operatorSelected'];
$fieldList      = $_GET['fieldList'];

$fieldstr = $fieldList . ",ST_AsGeoJSON(ST_Transform(l.geom,4326))";

$sql = "SELECT $fieldstr
        FROM $table l";

if (!empty($field) && !empty($operator) && !empty($attribute)) {
    $sql .= " WHERE {$field} {$operator} '{$attribute}' AND {$field}";
};

//echo ($sql);
?>

下面是它应该是什么样子的图像:

【问题讨论】:

    标签: javascript sql button query-builder


    【解决方案1】:

    一些事情:

    • 如果第一对被清空,您当前的 sql 将失败,因为不会有 WHERE 而只有 AND 子句。
    • 在 html 中使用数组允许您在 php 中使用数组,通过循环处理一切变得更加容易。

    一个简单的例子:

    html:

    <select name="field[]">...</select>
    <select name="operator[]">...</select>
    <select name="value[]">...</select>
    

    您可以使用 javascript 添加更多对完全相同的代码。

    现在在 php 中,您的 $_POST 变量将是数组,因此您可以执行以下操作:

    $sql = 'SELECT ...';
    
    # this array will contain all "AND" conditions
    $pairs = [];
    
    # loop over all your select groups
    foreach ($_POST['field'] as $key => $field) {
        if (!empty($field) && !empty($_POST['operator'][$key]) && !empty($_POST['value'][$key])) {
            $pairs[] = $field . " " . $_POST['operator'][$key] . " '" . $_POST['value'][$key] . "'";
        }
    }
    
    # add the conditions
    if (count($pairs) > 0) {
        $sql .= ' WHERE ' . implode(' AND ', $pairs);
    }
    
    # add sort order, execute sql, etc...
    

    顺便说一句,您应该用占位符替换该值,并对数据库、表和列名称以及运算符使用白名单,以避免 sql 注入/破坏您的查询。

    【讨论】:

    • 谢谢,这看起来像我需要的。但是关于如何使用/将其与 javascript 结合以添加更多相同代码对的任何想法?@jeroen
    • @L.fcg 这个 php 部分允许“无限”数量的对。要在 javascript 中生成 html,您可能必须在这里提出一个新问题,这有点太宽泛了。
    • @L.fcg 顺便说一句,你应该把你的问题回滚到原来的样子,因为现在问题和答案没有任何意义。
    • 好的,我会问另一个问题,谢谢!
    • 在我当前的 php 文件中,我有 $fieldList、$operatorList 和 $attributeList。我不能只在你使用 $_POST['field']、$_POST['foperator'] 和 $_POST['attribute'] 的地方使用它们吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    相关资源
    最近更新 更多