Search query composer

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 753 fois - Téléchargée 17 fois

Contenu du snippet

Cette petite fonction vous permettra de composer une condition MySQL pour par exemple une barre de recherche avec auto-complétion AJAX.

Source / Exemple :


function search_query_composer($search,$title)
{
	$tab = array_unique(explode(' ',$search));
	$cond = array();
	foreach ($tab as $key)
	{
		foreach ($title as $field)
		{
			if ($key!='')
				$cond[] = $field.' LIKE "%'.addslashes($key).'%"';
		}
	}
	if (!empty($cond))
	{
		return implode(' OR ',$cond);
	}
	else
		return '1=1';
}

Conclusion :


Utilisation :

$cond search_query_composer($search,$title)

$search string : mots clés recherchés par l'utilisateur séparés par un espace (à récupérer directement via la page appelée par AJAX.
Exemple : "cochon dine coucou lol hibou "

$title : array(string) : tableau des champs sql dans lesquels rechercher.
Exemple : "array('nom','prenom','adresse")"

$cond string : condition composée. A insérer directement dans le code sql comme n'importe quelle condition.
Exemple : 'SELECT nom,prenom FROM contacts WHERE '.$cond.' ORDER BY nom'

La meilleure utilisation est une recherche de contacts.
En tapant le nom, le prénom on peut accéder à la liste des contacts correspondant à/aux mot(s)-clé saisis.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
48
Date d'inscription
jeudi 18 octobre 2007
Statut
Membre
Dernière intervention
5 août 2009

Salut Centauriel,

Si tu veut faire une recherche utilise match($motCles) against($condition). Pour plus de renseignement va voir le manuel PHP
http://www.manuelphp.com/mysql/fulltext-search.php
A bientot
Astro
Messages postés
18
Date d'inscription
vendredi 22 juin 2007
Statut
Membre
Dernière intervention
6 août 2009

Merci, j'ai fait quelques modifications.
Pour le 1=1, je suppose que quand on ne tape rien, on affiche tout le monde.
C'est plus un filtre qu'une recherche...
;)
Messages postés
388
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009

y a plus simple voire plus propre.

function search_query_composer($search,array $title){
$tab = array_unique(explode(' ',$search)); // on pourra utiliser split pour avoir plusieur separateur voire utiliser preg_split pour avoir des mots de n caractères
$cond = array();
foreach ($tab as $key){
// if ($key != '' ) je doute de l'utilité mais si il est utile autant le faire dans la premiere boucle c'est autant de parcours du tableau suivant d'éviter ainsi que du même test
foreach ($title as $field){
$cond[] = $field.' LIKE "%'.$key.'%"'; // attention au metacaractere SQL ainsi qu'aux injections SQL
}
}
if ( count($cond) > 0 ){
return implode(' OR ',$cond); // evite de redécouper la chaine
}
return false ;
// j'ai supprimer le 1=1 car la requete est inutile si il y a pas de filtre
}

my 2 cents

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.