Effectuer une recherche à l'aide d'un array
Résolu
salimdrame
Messages postés
70
Date d'inscription
Statut
Membre
Dernière intervention
-
salimdrame Messages postés 70 Date d'inscription Statut Membre Dernière intervention -
salimdrame Messages postés 70 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je bloque sur un code depuis un bout de temps déjà et je commence à me demander si ce que je veux faire est possible. Voici le topo. En résumé j'ai un formulaire sur mon site qui récupère la recherche du visiteur et la transforme en tableau (array) dans le but de rechercher une correspondance mot par mot dans la base de données.
---------------------------- Code Html ---------------------
<form action="search.php" method="post">
<input type="text" name="recherche" maxlength="75" value="un mot ou un terme" onclick="if(this.value=='un mot ou un terme')this.value='';" />
< select name="area">
<option value="repertoire">Répertoire</option>
<option value="formations">Formations</option>
<option value="forum">Forum</option>
</select>
<input type="image" src="../img/search.png" style="vertical-align:middle;" />
</form>
----------------------------- PHP ---------------------------------
//On stock la chaine dans une variable
$recherche = $_POST['recherche'];
//On filtre les caractères et remplace les espaces et les caractères indésirables par un +
$recherche = preg_replace('/([^.a-zA-Z_0-9\'.šÐØÞßðŠúÚÛÙÜýÝŸÿžŽóÓÔÒøØõÕÖœŒÇÉÊÈËíÍÎìÌÏñÑ$€¢£¥ƒåÅÄÂãÃÁÀæÆçàåâäéèêëîìïòôöùûü,;:"!()\\-]+)/i', '+', $recherche);
//On crée un tableau
$array_chaine = explode('+', $recherche);
Et à partir de là j'aimerais que si la chaine "recherche" comprends 3 mots par exemple, que la requête sql qui se charge de sonder la table à la recherche de correspondances prenne en compte chaque mot séparément de sorte en afficher tout les résultat qui comprennent au moins 1 des 3 mots que contient la chaine.
Pensez vous que c'est possible en PHP? Si oui comment?
Merci d'avance
Je bloque sur un code depuis un bout de temps déjà et je commence à me demander si ce que je veux faire est possible. Voici le topo. En résumé j'ai un formulaire sur mon site qui récupère la recherche du visiteur et la transforme en tableau (array) dans le but de rechercher une correspondance mot par mot dans la base de données.
---------------------------- Code Html ---------------------
<form action="search.php" method="post">
<input type="text" name="recherche" maxlength="75" value="un mot ou un terme" onclick="if(this.value=='un mot ou un terme')this.value='';" />
< select name="area">
<option value="repertoire">Répertoire</option>
<option value="formations">Formations</option>
<option value="forum">Forum</option>
</select>
<input type="image" src="../img/search.png" style="vertical-align:middle;" />
</form>
----------------------------- PHP ---------------------------------
//On stock la chaine dans une variable
$recherche = $_POST['recherche'];
//On filtre les caractères et remplace les espaces et les caractères indésirables par un +
$recherche = preg_replace('/([^.a-zA-Z_0-9\'.šÐØÞßðŠúÚÛÙÜýÝŸÿžŽóÓÔÒøØõÕÖœŒÇÉÊÈËíÍÎìÌÏñÑ$€¢£¥ƒåÅÄÂãÃÁÀæÆçàåâäéèêëîìïòôöùûü,;:"!()\\-]+)/i', '+', $recherche);
//On crée un tableau
$array_chaine = explode('+', $recherche);
Et à partir de là j'aimerais que si la chaine "recherche" comprends 3 mots par exemple, que la requête sql qui se charge de sonder la table à la recherche de correspondances prenne en compte chaque mot séparément de sorte en afficher tout les résultat qui comprennent au moins 1 des 3 mots que contient la chaine.
Pensez vous que c'est possible en PHP? Si oui comment?
Merci d'avance
A voir également:
- Effectuer une recherche à l'aide d'un array
- Vous devez disposer d'une autorisation pour effectuer cette action - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Je recherche une chanson - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
5 réponses
la soluc:
au lieu de rechercher mot par mot dans la boucle foreach avec une query à chaque passage, tu cree une seule query et dans ta boucle tu genres la condition avec des OR pour chaque mot
au lieu de rechercher mot par mot dans la boucle foreach avec une query à chaque passage, tu cree une seule query et dans ta boucle tu genres la condition avec des OR pour chaque mot
$condition=""; //init foreach ($array_chaine as $index=> $keyword){ if($index==0){ $condition.=" champ_xxxxx LIKE '%".$keyword."%'"; }elseif($index>0{ $condition.=" OR champ_xxxxx LIKE '%".$keyword."%'"; //attention ne pas oublier l'espace avant OR ! } } $query="SELECT DISTINCT champ_xxxxxx FROM tatable WHERE ".$condition." "; mysql_query($query); etc...
Salut,
la suite ressemblerait à ça :
la suite ressemblerait à ça :
//On crée un tableau $array_chaine = explode('+', $recherche); //On effectue la recherche pour chacun des éléments du tableau foreach ($array_chaine as $ $keyword){ $result = mysql_query('SELECT machin IN truc WHERE condition="'.$keyword.'"'); //...suite du traitement des résultats }
Super! Ça marche mais j'ai un nouveau problème.
J'aimerais afficher un résultat pour plusieurs mots correspondants. Je m'explique : Lorsque dans une suite de mots j'ai trois mots qui font référence au même résultat, ce même résultat apparait 3 fois. Comment faire pour afficher le résultat une fois et ignorer le ou les doublons?
Merci encore
J'aimerais afficher un résultat pour plusieurs mots correspondants. Je m'explique : Lorsque dans une suite de mots j'ai trois mots qui font référence au même résultat, ce même résultat apparait 3 fois. Comment faire pour afficher le résultat une fois et ignorer le ou les doublons?
Merci encore
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question