Je crée un type de générateur de requête et je souhaite implémenter un bouton pour ajouter une instruction AND à ma requête. J'ai créé une version dans laquelle j'ai implémenté 1 instruction AND, mais c'est un peu sournois et je veux que l'utilisateur ait la possibilité de faire plus d'une instruction AND. C'est le code que j'ai en ce moment.
MISE À JOUR Voici mon fichier .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);
?>
Quelques choses:
WHERE
que des AND
clauses.Un exemple simple:
html:
<select name="field[]">...</select>
<select name="operator[]">...</select>
<select name="value[]">...</select>
Vous pouvez utiliser javascript pour ajouter plus de paires du même code exact.
Maintenant, en php, vos $_POST
variables seront des tableaux, vous pouvez donc faire quelque chose comme:
$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...
En passant, vous devez remplacer la valeur par un espace réservé et utiliser des listes blanches pour les noms de base de données, de table et de colonne et les opérateurs pour éviter l'injection SQL / la rupture de votre requête.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots