J'essaye de créer un filtre dans mysql et php. Dans ma base de données, j'ai de nombreux champs comme: nom, numéro de téléphone, email ... Et même si je fais quelque chose comme

if(!empty($_POST['name'])){ 
$name=$_POST['name']
}
if(!empty($_POST['phoneNumber'])){ 
   $phoneNumber= $_POST['phoneNumber']
    }
if(!empty($_POST['email'])){ 
    $email=$_POST['email']
    }

Si quelqu'un entre uniquement dans le champ du nom, comment faire pour ne pas inclure les autres champs dans la requête?

$query=query("SELECT * FROM clients WHERE clientName=$clientName && phoneNumber=$phoneNumber && email=$email)
1
JohnDickinson 23 mai 2018 à 19:05

3 réponses

Meilleure réponse

Vous pouvez essayer quelque chose comme indiqué ci-dessous

if(!empty($_POST['name'])){ 
$name=$_POST['name'];
$query="SELECT * FROM clients WHERE clientName='$name'";
}
if(!empty($_POST['phoneNumber'])){ 
   $phoneNumber= $_POST['phoneNumber'];
   $query.= " AND phoneNumber='$phoneNumber'";
    }
if(!empty($_POST['email'])){ 
    $email=$_POST['email'];
    $query.= " AND email='$email'";
    }

REMARQUE: utilisez une requête préparée car elle est ouverte à une attaque par injection SQL. ceci n'est que démonstration.

1
Rahul Shrivastava 23 mai 2018 à 16:22

Ce que je fais pour ce genre de chose, c'est d'envoyer tous les termes de recherche à publier dans un seul objet JSON. Donc en javascript je collecte toutes les entrées de recherche et j'ai un objet où chaque clé correspond au nom de l'entrée et chaque valeur correspond au val. Par exemple dans jQuery

var searchObj = {};
$(".searchInput").each(function() {
     searchObj[$(this).attr('name')] = $(this).val();
});
var searchJSON = JSON.stringify(searchObj);
//later send searchJSON to php

//in php
$seachObj = json_decode($_POST["searchJSON"], true);
$sql = "SELECT * in CLIENTS WHERE ";
foreach($searchObj as $key => $val) {
    $sql .= "$key = '$val' AND ";
}
$sql .= "1";

MAINTENANT, CECI EST TOTALEMENT NON SÉCURISÉ !!! Seulement inclus pour que ce soit clair. Mieux vaut utiliser PDO ou mysqli, utiliser des instructions préparées. Comme ça:

$seachObj = json_decode($_POST["searchJSON"], true);
$sql = "SELECT * in CLIENTS WHERE ";
$vals = [];
foreach($searchObj as $key => $val) {
    $vals[] = $val;
    $sql .= "$key = ? AND ";
}
$sql .= "1";
//learn more about PDO to get this part
$stmt = $pdo->prepare($sql);
$stmt->execute($vars);
1
Michael Beeson 23 mai 2018 à 16:28

Je pense que cela le ferait.

$condition = "";

if(!empty($_POST['name'])){ 
$name=$_POST['name'];
$condition .= " AND clientName LIKE ".$name;
}
if(!empty($_POST['phoneNumber'])){ 
   $phoneNumber= $_POST['phoneNumber'];
    $condition .= " AND phoneNumber ='".$phoneNumber."'";
}
if(!empty($_POST['email'])){ 
    $email=$_POST['email'];
    $condition .= " AND email='".$email."'";
}

if(!empty($condition)){
   $query="SELECT * FROM clients WHERE ".ltrim($condition," AND");
}else{
   $query="SELECT * FROM clients";
}
-1
akshay khairmode 23 mai 2018 à 16:17