Mutli critères de recherche

Eléphant du PHP | 184 Messages

01 juin 2011, 12:24

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());


ViPHP
xTG
ViPHP | 7331 Messages

01 juin 2011, 12:47

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.

Eléphant du PHP | 184 Messages

01 juin 2011, 13:13

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);


Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

01 juin 2011, 15:09

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.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 184 Messages

01 juin 2011, 15:32

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 ?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

01 juin 2011, 16:26

oui. 1 formulaire + 3 champs = 3 critères dans 1 requête combinés par un OR.

Est-ce plus clair? :wink:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 184 Messages

01 juin 2011, 16:32

Impec, merci beaucoup !

Je vais essayer !