如何创建一个AND按钮,将AND语句添加到查询?

时间:2016-06-14 08:46:39

标签: javascript sql button query-builder

我正在制作某种类型的查询构建器,我想实现一个按钮来向我的查询添加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);
?>

以下是它应该是什么样子的图像: click here

1 个答案:

答案 0 :(得分: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...

顺便说一下,你应该用占位符替换值,并使用white-lists表示数据库,表和列名以及运算符,以避免sql注入/破坏你的查询。