Page 1 sur 1

Mutli critères de recherche

Posté : 01 juin 2011, 12:24
par TRUNCKS
Bonjour à vous,

J'ai essayé de faire un petit formulaire de recherche pour ma bdd.

J'ai un formulaire comme cela:

<p>Faire une recherche:</p>
<form action="recherche.php" method="post">
<input type="text" name="requete" size="30">
<input type="submit" value="Rechercher">
</form>

Ma question est: avec ce seul est unique formulaire, est il possible de rechercher sur plusieurs champ d'une base de données.
J'ai réussi à faire chercher sur le champ "société" mais j'aimerai rajouter par exemple "nom" et "ville".
Il faut créer deux autres formulaires pour la recherche où c'est possible avec un seul ? ( En l’occurrence, celui ci dessus )

Voici ma requête de recherche:

$query = mysql_query("SELECT * FROM contact WHERE societe LIKE '%$requete%' ORDER BY societe DESC") or die (mysql_error());


Re: Mutli critères de recherche

Posté : 01 juin 2011, 12:47
par xTG
Ta requête WHERE peut être une variable.
Une variable construite dynamiquement suite à plusieurs valeurs renvoyées par un formulaire ou bien une seule.

Le tout est de bien penser à contrôler et à vérifier les valeurs que te renvoie ton formulaire afin d'éviter toute injection SQL.

Re: Mutli critères de recherche

Posté : 01 juin 2011, 13:13
par TRUNCKS
Pardon mais je ne suis pas sur d'avoir bien compris comment m'y prendre.

Quelque chose dans ce genre ?

$multi = mysql_query("SELECT societe, nom, adresse FROM contact") or die (mysql_error()); 

$query = mysql_query("SELECT * FROM contact WHERE '$multi' LIKE '%$requete%' ORDER BY societe DESC") or die (mysql_error()); //
$nb_resultats = mysql_num_rows($query);


Re: Mutli critères de recherche

Posté : 01 juin 2011, 15:09
par sadeq
De toutes façons tu peux utiliser un seul formulaire contenant tous les champs qui serviront comme critère de recherche et une seule requête SQL pour exécuter la recherche.
Mais, la première question qui s'impose est quelle est la combinaison logique que tu comptes utiliser entre les différents critères, est-ce un ET ou/et un OU? Pour pouvoir construire la clause WHERE de la requête SQL.

Si c'est un ET pour tous les champs du formulaire, alors c'est simple : ta requête utilisera un AND pour combiner toutes les conditions sur les champs dans clause Where. ça pourrait être comme ça:
$query = mysql_query("SELECT * FROM contact WHERE nom LIKE '%$nom%'  AND adresse LIKE '%$adresse%' AND societe LIKE '%$societe%' ORDER BY societe DESC") or die (mysql_error());
Quand le formulaire de recherche est comme ça:
<p>Faire une recherche:</p>
<form action="recherche.php" method="post">
<input type="text" name="nom" size="20">
<input type="text" name="adresse" size="255">
<input type="text" name="societe" size="30">
<input type="submit" value="Rechercher">
</form>
Si la combinaison est un OU, il s'agit de la même solution que pour le ET il suffit simplement de remplacer AND par OR dans la requête SQL.

Par contre si les combinaisons ET/OU sont particulièrement distribuées entre les champs, il faudra que dans le formulaire l'utilisateur choisisse les combinaisons ET/OU avant de lancer la recherche puis au programme PHP de construire automatiquement la clause WHERE de la requête SQL. C'est la solution de recherche dynamique qu'on t'as déjà proposé dans les réponses précédentes. Mais j'attends ta réponse à mes questionnements, avant d'aller plus loin.

Re: Mutli critères de recherche

Posté : 01 juin 2011, 15:32
par TRUNCKS
Merci beaucoup, c'est plutot un OU vers lequel je vais m'orienter.

Du coup, je n'ai toujours pas vraiment eu de réponse pour ma question initiale.

Il faut donc obligatoirement trois champs si je veux faire une recherche sur trois critère ?

Re: Mutli critères de recherche

Posté : 01 juin 2011, 16:26
par sadeq
oui. 1 formulaire + 3 champs = 3 critères dans 1 requête combinés par un OR.

Est-ce plus clair? :wink:

Re: Mutli critères de recherche

Posté : 01 juin 2011, 16:32
par TRUNCKS
Impec, merci beaucoup !

Je vais essayer !