Page 1 sur 1

Affichage résultat moteur de recherche PHP

Posté : 03 mars 2011, 00:57
par Vertigo
Bonjour,

Pour le site d'un ami, je voudrais afficher les résultats d'une recherche en affichant le mot recherche en gras et dans son contexte (précédé et suivi de 10 mots par exemple, comme ça se fait beaucoup sur les sites. Et je voudrais que l'utilisateur puisse cliquer sur cette ligne pour être dirigé vers la page qui la contient.

Mes textes sont contenus dans une base de données qui contient des paragraphes. Actuellement, lors d'une recherche sur un mot, le résultat affiche le mot en gras et le paragraphe entier dans lequel il est contenu, plus un lien vers la page qui contient ce paragraphe.

Pour le gras, j'ai réussi avec
echo str_replace($mot, "<strong>$mot</strong>", $para['paragraphe']);

Mais je ne trouve pas pour afficher le mot dans son contexte...

Voici mon code entier:
$requete = "SELECT * FROM textes AS T, pages AS P WHERE P.id=T.idpage AND T.paragraphe LIKE '%$mot%'";

$resultat = mysql_query ($requete, $connexion);

while ($para = mysql_fetch_array ($resultat)) {
echo "<li>";
echo "<a href=\"$para[scriptphp]\">$para[titre]</a><br />";
echo str_replace($mot, "<strong>$mot</strong>", $para['paragraphe']);
echo "</li>";
}
echo "</ul>";

Merci beaucoup de votre attention!!

Re: Affichage résultat moteur de recherche PHP

Posté : 03 mars 2011, 22:42
par Ryle
Il te faut utiliser une expression régulière pour capturer les éventuels 10 mots qui précèdent la chaine que tu recherches, et les potentiels 10 mots qui le suivent. Un preg_match() te permettra d'extraire cette chaine de ton paragraphe, la difficulté étant de constituer le bon masque :)

Re: Affichage résultat moteur de recherche PHP

Posté : 08 mars 2011, 14:13
par Vertigo
Merci!
et est-ce qu'il existe un masque qui peut prendre en compte toutes les possibilités?
quelque chose du genre? [a-zA-Z]?
Parles-tu bien des expressions régulières quand tu utilises le terme masque?
Les mots qui précéderont et suivront seront différents pour chaque résultat.

Et n'y a t-il pas de code "tout fait" pour ce genre d'affichage?