<?php
// ------------------------------------------------------------------------- //
// Petit moteur de recherche. //
// ------------------------------------------------------------------------- //
// Auteur: Frédéric Bouchery //
// Email: frederic.bouchery@consultant.com //
// Web: http://www.cybergroupe.net/ //
// ------------------------------------------------------------------------- //
// Voici une petite fonction qui peut beaucoup vous aider. Elle prend en //
// paramètre : //
// - La chaîne de recherche (mots séparés par des espaces ou toute //
// ponctuation [cf : la ligne sur les ponctuations]), //
// - le nom du champ à rechercher dans la table<BR>- Mettre "true" ou pas //
// de paramètre pour une recherche en "OU", et "false" pour une //
// recherche en "ET". //
// ------------------------------------------------------------------------- //
// 1) On recherche TOUS les messages qui contiennent TOUS les mots cités sans
// prendre en compte les accents (pratique pour les mots mal orthographiés) :
$search = Convert4Search('message','php script apache mysql',false);
$result = mysql_query("SELECT * FROM messages WHERE $search");
// 2) Là on recherche les messages qui contiennent au moins un des mots :
$search = Convert4Search('message','php scrîpt apache mysql');
$result = mysql_query("SELECT * FROM messages WHERE $search");
// -------- Voici la fonction -----------
function Convert4Search($chaine, $champ, $ou = true) {
$chaine = trim(strtolower($chaine));
// Vous mettez les ponctuations et caractères que vous ne voulez pas
$chaine = ereg_replace('[\'"!?,;:]',' ',$chaine);
// Conversion des caractères accentués
$chaine = ereg_replace('[aàáâãäå]','[aàáâãäå]',$chaine);
$chaine = ereg_replace('[oòóôõöø]','[oòóôõöø]',$chaine);
$chaine = ereg_replace('[eèéêë]','[eèéêë]',$chaine);
$chaine = ereg_replace('[cç]','[cç]',$chaine);
$chaine = ereg_replace('[iìíîï]','[iìíîï]',$chaine);
$chaine = ereg_replace('[uùúûü]','[uùúûü]',$chaine);
$chaine = ereg_replace('[yÿ]','[yÿ]',$chaine);
$chaine = ereg_replace('[nñ]','[nñ]',$chaine);
if ($ou) {
// C'est une recherche en "OU"
$chaine = "LCASE($champ) REGEXP '";
$chaine .= ereg_replace('([^ ]*)([ ]*)([^ ]+)','\\1|\\3',$chaine)."'";
} else {
// C'est une recherche en "ET"
$chaine = ereg_replace('[ ]*([^ ]+)[ ]*', "LCASE($champ) REGEXP ('\\1') AND ",
$chaine);
$chaine = ereg_replace(' AND $','',$chaine);
}
return $chaine;
}