Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/07/2011, 02h43   #1
Invité régulier
 
daddy roots
Inscription : février 2010
Messages : 24
Détails du profil
Informations personnelles :
Nom : daddy roots

Informations forums :
Inscription : février 2010
Messages : 24
Points : 5
Points : 5
Par défaut Gestion des accents dans moteur de recherche

Bonjour à tous,

Étant monté à 48° de température interne, j'me dois d'abdiquer et de demander conseil.

Je fais un moteur de recherche pour mon site. Je souhaiterai trouver le mot"cérémonie" lorsque je tape le mot "ceremonie" ... mais bon voilà j'ai lu les regexp, fais des tests, avancer, reculer, me suis perdu 3 fois ...et suis arrivé ici...

Bref un ptit coup de main pour la gestion des accents dans le resultat de ma requête ne serait pas de refus...
Un grand Merci.
Karpe,

Mon code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
$nombre = 20;  
// si limite n'existe pas on l'initialise à zéro
if (!$limite) $limite = 0; 
// on cherche le nom de la page.    
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];
//=========================================    
// connection à la DB
//=========================================
 
$link = mysql_connect("$host", "$username", "$password");
mysql_select_db ("$db_name");
 
 
$recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
 
//$recherche = str_replace(array('é', 'è', 'ê'), 'e', $recherche);
//function delaccents($chaine){
 //   $chaine = ereg_replace('[àâäåãáÂÄÀÅÃÁæÆ]','a', $chaine);
 //   $chaine = ereg_replace('[çÇ]','c', $chaine);
//    $chaine = ereg_replace('[éèêëÉÊËÈ]','e', $chaine);
 //   $chaine = ereg_replace('[ïîìíÏÎÌÍ]','i', $chaine);
 //   $chaine = ereg_replace('[ñÑ]','n', $chaine);
 //   $chaine = ereg_replace('[öôóòõÓÔÖÒÕ]','o', $chaine);
 //   $chaine = ereg_replace('[ùûüúÜÛÙÚ]','u', $chaine);
 //   $chaine = ereg_replace('[ÿ]','y', $chaine);
 //   return $chaine;
//}
 
$categorie = $_POST['categorie']; //sécurisation des variables
$localisation = $_POST['localisation']; //sécurisation des variables
 
$empty=1;			  
if ($categorie && $empty)
{
$selecat = "AND categorie='$categorie'";
}
else
{
$selecat = "";
}
 
 
 
if ($localisation == $_GET['id_region'])
{
$selecloc = "AND region='$localisation'";
}	
//si localisation est egal à idregion = affiche region
 
elseif (($localisation == $_GET['f'])  && (!($localisation == '')) && (!($localisation == $_GET['id_region'])))
{
$selecloc = "";
}
//ou sinon localisation est egal à f et n'est pas vide = affiche france
 
elseif ((!($localisation == $_GET['id_region'])) && (!($localisation == '')))
{
$selecloc = "AND departement='$localisation'";
} 
//ou sinon localisation n'est pas egal à idregion et n'est pas vide = affiche departement
 
elseif ($localisation == '')
{
$selecloc = "AND region='". $_GET['id_region']. "'";
}
// si rien de tout ca on affiche la region 
 
 
 
 
$and_ou_or = 'AND'; //on utilisera AND dans la boucle
 
 
$mots = explode(" ", $recherche); //séparation des mots
 
$nombre_mots = count ($mots); //compte le nombre de mots
$valeur_requete = '';
for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
{
$valeur_requete .= '' . $and_ou_or . ' titre LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
}
$valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
//=========================================    
// requ&ecirc;te SQL qui compte le nombre total 
// d'enregistrements dans la table.
//=========================================
$select = "SELECT count(idannonce) FROM annonces WHERE $valeur_requete $selecat $selecloc AND statut='oui' " ;
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];
//=========================================
// v&eacute;rifier la validit&eacute; de notre variable 
// $limite;
//=========================================
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite pass&eacute;e n'est pas valide on la remet &agrave; z&eacute;ro
if(!$verifLimite)  {
    $limite = 0;
}
$selection_recherche = mysql_query("SELECT *
FROM annonces
WHERE $valeur_requete $selecat $selecloc AND statut='oui' ORDER BY idannonce DESC LIMIT $limite,$nombre"); //requête avec le résultat de la boucle dedans
 
$nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
 
 
if ($nombre_resultats == 0) //s'il n'y a pas de résultat
{
echo '<div id=infoann align="left"><span class="contenus16blanc">Aucune annonce correspondant à votre recherche.</span></div>';
}
else //il y a au moins un résultat
{
echo '<div id=infoann align="left"> <span class="contenus16bleuciel">  '  . $total . '</span><span class="contenus16blanc"> annonce(s) correspondant à votre recherche <br /><br /></span></div>'; //nombre de résultats
 
 
if($total) {
while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
{
karpe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 09h10   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Hello

Base de données > UTF-8
Tables > UTF-8
Scripts PHP > UTF-8
Flux HTML > encore et toujours UTF-8

Et adieu les problèmes
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 15h02   #3
Invité régulier
 
daddy roots
Inscription : février 2010
Messages : 24
Détails du profil
Informations personnelles :
Nom : daddy roots

Informations forums :
Inscription : février 2010
Messages : 24
Points : 5
Points : 5
Merci Benjamin mais ma table et mes pages sont bien toutes encodées en Utf8.
Mon problème ne se résout pas...

Que puis-je faire avec les regexp? ... et que pour le résultat de ma requête soit prise en compte les termes avec ou sans accents ?
karpe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 15h17   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
A moins de faire des regexp complexes au niveau MySQL ou de faire des recherches fulltext, je ne vois qu'un remplacement bien dégeu des caractères qui posent problème par des wildcards...

Peut être que quelqu'un de plus expérimenté pourra trouver une solution plus propre.

Oriente-toi quand même vers la recherche fulltext, je pense que c'est la solution. http://dev.mysql.com/doc/refman/5.0/...xt-search.html
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h41.


 
 
 
 
Partenaires

Hébergement Web