fonction moteur de recherche

ViPHP
AB
ViPHP | 5818 Messages

16 sept. 2009, 16:53

#-o #-o l'extrait de ton code que j'ai cité juste après devrait te mettre sur la bonne voie.

Mammouth du PHP | 620 Messages

16 sept. 2009, 17:05

Bon ok j'ai vue... j'avais ecri 2 fois --> $ligne = mysql_fetch_array($resultat).
c'est bon sa fonctionne. merci pour votre patience et votre savoir.

Mammouth du PHP | 620 Messages

16 sept. 2009, 17:38

bon me revoilà car je m'apercoi que sa fonctionne pas si bien que ça finalement.

je me retrouve apres test face a 3 problemes :

1- lorsque je fait ma recherche par exemple sur le mot "lac" je n'ai pas de resultats alors que dans mes champs j'ai bien des données qui contiennent le mot lac en texte ex : "Photo aérienne de la tour de la merelle et le lac de gérardmer ".
me revoilà donc dans un nouveau probléme...

2- Dans ma recherche si je rentre "gerardmer" j'ai pas de résultat à cause de l'accent. y'a t'il un moyen pour ne pas tenire compte des accents lors de la recherche et ainsi si un internaute rentre "gerardmer" il obtiendra les resultats avec "gérardmer" et "gerardmer".?

3- si je fais une recherche avec mysql pour par exemple sur le mot "paysages" : j'ai 15 resultats qui ressortent. maintenant si je passe par mon moteur de recherche avec la meme recherche je n'ai que 14 résultats. J'ai donc un resulat qui se perd quelque par.... (j'ai testé avec d'autres mot c'est pareil, un resultat en moins sur toutes les recherches)


ma fonction de recherche est la suivante :
<?php
include("../admin/connexion-sql.php");

function search()
          {
$champ=$_POST['rechercherpar'];
$mot=$_POST['mot_cle'];

$resultat=mysql_query("SELECT * FROM IWgalerie WHERE match(`type`,`ref`,`exemple`,`alt`) against ('$mot')");
$ligne=mysql_fetch_array($resultat);

   while($ligne = mysql_fetch_array($resultat))
          {
   $ref=$ligne['ref'];
   $alt=$ligne['alt'];
   $type=$ligne['type'];
 echo $ligne['id'].' '.$type.' '.$ref.' '.$alt.'
<img src="../pages/mini-galerie.php?f='.$ligne['photoref'].'" alt="'.$ligne['alt'].'" border="0" width="168px" height="113px" class="reflect rheight31 ropacity33"/><br/>';
          }
          }
search();
?>

ViPHP
ViPHP | 4039 Messages

17 sept. 2009, 10:23

Pour la 3:
//(...)
$resultat=mysql_query("SELECT * FROM IWgalerie WHERE match(`type`,`ref`,`exemple`,`alt`) against ('$mot')");
$ligne=mysql_fetch_array($resultat); // <----------------- C'est quoi ça ?

   while($ligne = mysql_fetch_array($resultat))
          {
//(...)
   
Pour la 2: c'est normal. C'est pourquoi je propose d'utiliser une champ supplémentaire dans lequel tu concatène une version normalisée (sans majuscules, sans accents, sans ponctuation) de tout sur quoi tu veux chercher (type,ref, exemple et alt donc), beaucoup plus pratique pour faire une recherche dessus.

Pour la 1: il faut voir les paramètres de Mysql, d'origine la taille minimale des mots est de 3 lettres.
Dans le fichier de configuration de mysql, tu dois pouvoir trouver quelque chose qui ressemble à ceci:

Code : Tout sélectionner

[mysqld] ft_min_word_len=3
http://dev.mysql.com/doc/refman/5.1/en/ ... uning.html

Suffit de mettre 2 donc, et de refaire les index.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 620 Messages

22 sept. 2009, 20:51

ok merci.
pour la concatenation je comprend pas trop (en fait pas du tout) comment faire. du coup sa moblige a créé un champ suplementaire dans ma bdd ?
pouvez vous m'expliquer svp ?

sinon y'a til une autre solution que de faire un concatenation?