如何创建向查询添加 AND 语句的 AND 按钮?
How to create an AND button that adds a AND statement to a query?
我正在制作某种类型的查询生成器,我想实现一个按钮来向我的查询添加 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);
?>
下面是它应该是什么样子的图片:
几件事:
- 如果第一对被清空,您当前的 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...
顺便说一下,您应该用占位符替换该值,并对数据库、table 和列名以及运算符使用白名单,以避免 sql 注入/破坏您的查询.
我正在制作某种类型的查询生成器,我想实现一个按钮来向我的查询添加 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);
?>
下面是它应该是什么样子的图片:
几件事:
- 如果第一对被清空,您当前的 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...
顺便说一下,您应该用占位符替换该值,并对数据库、table 和列名以及运算符使用白名单,以避免 sql 注入/破坏您的查询.