petit moteur de recherche - détail

petit moteur de recherche - détail - PHP - Programmation

Marsh Posté le 17-02-2006 à 12:20:18    

bonjour;
voici le code du moteur de recherche sur un de mes sites:
 

<?
 
if (isset($search)) {
 
$getpages = 0;
if ($search == "" ) { $search = "........"; }
 
echo("<p class=\"titre\">R&eacute;sultats pour la requ&ecirc;te <font color=\"red\">$search</font></p> <br><br>" );
 
# TRAITEMENT DE LA REQUÊTE ::::::
 
// Efface tout ce qui se trouve derrière un espace pour la requête
 
 
// Remplacement des caractères spéciaux
 
$search = str_replace("<", "", $search);
$search = str_replace(">", "", $search);
$search = str_replace("\'", "'", $search);
$search = str_replace("_", " ", $search);
$search = str_replace("&", "et", $search);
 
// Suppression des accents etc...
 
$search = str_replace("é", "e", $search);
$search = str_replace("è", "e", $search);
$search = str_replace("ë", "e", $search);
$search = str_replace("ê", "e", $search);
$search = str_replace("à", "a", $search);
$search = str_replace("ä", "a", $search);
$search = str_replace("â", "a", $search);
$search = str_replace("ü", "u", $search);
$search = str_replace("ù", "u", $search);
$search = str_replace("û", "u", $search);
$search = str_replace("ô", "o", $search);
$search = str_replace("ö", "o", $search);
$search = str_replace("î", "i", $search);
$search = str_replace("ï", "i", $search);
$search = strtolower($search);
 
# RECHERCHE DANS LES FICHIERS ::::::
 
// Ouverture des pages du site et recherche des fichiers html et php
 
$rep = opendir("." );
 
while ($file = readdir($rep))
{
if ($file != '..' && $file !='.' && $file !='' && $file !='recherche.php' && (substr_count($file, ".htm" ) || substr_count($file, ".html" ) || substr_count($file, ".php" ) || substr_count($file, ".txt" )))
{
 
// Recherche des infos dans les pages
 
$lecture = fopen("$file", "r" );
$fichier_a_lire = fread($lecture, filesize("$file" ));
$tagged = $fichier_a_lire;
fclose($lecture);
 
// Traitement du texte des pages
 
$fichier_a_lire = strip_tags($fichier_a_lire);
$fichier_a_lire = str_replace("é", "e", $fichier_a_lire);
$fichier_a_lire = str_replace("è", "e", $fichier_a_lire);
$fichier_a_lire = str_replace("ë", "e", $fichier_a_lire);
$fichier_a_lire = str_replace("ê", "e", $fichier_a_lire);
$fichier_a_lire = str_replace("à", "a", $fichier_a_lire);
$fichier_a_lire = str_replace("ä", "a", $fichier_a_lire);
$fichier_a_lire = str_replace("â", "a", $fichier_a_lire);
$fichier_a_lire = str_replace("ü", "u", $fichier_a_lire);
$fichier_a_lire = str_replace("ù", "u", $fichier_a_lire);
$fichier_a_lire = str_replace("û", "u", $fichier_a_lire);
$fichier_a_lire = str_replace("ô", "o", $fichier_a_lire);
$fichier_a_lire = str_replace("ö", "o", $fichier_a_lire);
$fichier_a_lire = str_replace("î", "i", $fichier_a_lire);
$fichier_a_lire = str_replace("ï", "i", $fichier_a_lire);
$fichier_a_lire = strtolower($fichier_a_lire);
 
# AFFICHAGE DES RESULTATS ::::::
 
if (eregi($search,$fichier_a_lire)) {
$getpages++;
 
// Titre de la page
 
$titre_page = str_replace(".htm", "", $file);
$titre_page = str_replace(".html", "", $titre_page);
$titre_page = str_replace(".php", "", $titre_page);
$titre_page = strtolower($titre_page);
$titre_page = ucwords($titre_page);
 
// Zone de texte concernée
 
$lataille = strlen($search);
$passage = strpos($fichier_a_lire, $search);
$nb_affich = substr_count($fichier_a_lire, $search);
$passage = substr($fichier_a_lire, $passage, 300);
$passage = wordwrap($passage, 80, "<br>" );
$passage = str_replace($search, "<span class=\"surlign\">$search</span>", $passage);
// Affichage des données trouvées
 
 
echo("Dans la page \"<a href=\"index.php?page=$file\"><b>$titre_page</b>\"</a> : $nb_affich fois<br><br><a href=\"index.php?page=$file\"><font color=\"#29364f\"><i>$passage...</i></font></a><br><br><br>" );
 
}
 
// Fin
 
}
 
}
closedir($rep);
clearstatcache();
}
 
// Si aucun résultat
 
if (($getpages == 0) && isset($search)) {
echo("Aucun r&eacute;sultats" );
}
?>


 
cela donne ca apres une recherche : http://img104.imageshack.us/img104/7586/u2ww.jpg
 
le probleme c'est que le mot recherché apparait en premier et je souhaiterai simplement qu'il apparaisse un peu plus au milieu du reste du texte.  
comment faire ? merci d'avance pour votre aide


Message édité par atmakefka le 18-02-2006 à 18:16:55
Reply

Marsh Posté le 17-02-2006 à 12:20:18   

Reply

Marsh Posté le 17-02-2006 à 12:26:03    

Comme déjà dis plusieurs fois, ici nous aidons ceux qui on des problèmes avec le codes qu'ils ont créé eux même et non pas un script récupéré tout fait!
 

Spoiler :

Remplacer
$passage = substr($fichier_a_lire, $passage, 300);
par :
$passage = substr($fichier_a_lire, $passage-300, 300);


Message édité par dwogsi le 17-02-2006 à 12:40:40
Reply

Marsh Posté le 17-02-2006 à 12:32:17    

merci mais ca ne marche pas, le mot recherche n'apparait plus

Reply

Marsh Posté le 17-02-2006 à 12:46:42    

Chez moi ça marche! Mais je suppose que ça doit foirer si le mot rechercher se trouve au début du fichier....

Reply

Marsh Posté le 17-02-2006 à 12:47:24    

oui voilà. comment régler le problème?

Reply

Marsh Posté le 17-02-2006 à 12:48:54    

[:sh@rdar] http://fr.php.net/manual/fr/function.min.php
Les valeurs à donner à la fonction coulent de source je pense.

Reply

Marsh Posté le 17-02-2006 à 12:49:54    

euh merci mais je ne comprends pas :(

Reply

Marsh Posté le 17-02-2006 à 12:53:39    

Oups, je suis aller trop vite, c'est la fonction max qui est utile dans le cas présent. Et en quoi elle serait utile? En disant que si on s'apréte à afficher depuis un indice négatif, alors on affichera depuis le début soit la position 0.

Reply

Marsh Posté le 17-02-2006 à 12:55:37    

d'accord mais comment je fais ici ? vous pouvez donner un exemple s'il vous plait ?

Reply

Marsh Posté le 17-02-2006 à 13:00:38    

Il y a un exemple simple dans la doc.
Et non je te donerais pas la solution clé en main. A toi de réfléchir par toi même et si pas encore fait d'apprendre les bases du langage, par ce que là, le changement à faire est trés loin d'être compliqué.

Reply

Marsh Posté le 17-02-2006 à 13:00:38   

Reply

Marsh Posté le 17-02-2006 à 13:03:03    

je vois pas comment employer la fonction max. je connais les bases mais je suis pas encore capable de faire ce genre de code c'est tout

Reply

Marsh Posté le 17-02-2006 à 13:07:53    

$passage = substr($fichier_a_lire, $passage, max($passage,300));
ca change pas grand chose, je vois pas a quoi sert max


Message édité par atmakefka le 17-02-2006 à 13:08:14
Reply

Marsh Posté le 17-02-2006 à 13:35:20    

$passage = substr($fichier_a_lire, max($passage-300,$passage), 300);  
non?

Reply

Marsh Posté le 17-02-2006 à 13:53:33    

remplace tes str_replace par strtr c'est carrément plus rapide ;)


---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 17-02-2006 à 14:06:53    

Et ya pas de gestion du timeout... Si ya beaucoup de fichiers ça bloque.


Message édité par dwogsi le 17-02-2006 à 14:07:08
Reply

Marsh Posté le 17-02-2006 à 16:47:58    

non ca ne marche tjrs pas :(

Reply

Marsh Posté le 18-02-2006 à 18:16:04    

aidez moi svp

Reply

Marsh Posté le 18-02-2006 à 18:21:28    

dwogsi a écrit :

$passage = substr($fichier_a_lire, max($passage-300,$passage), 300);  
non?


 
Non, là ce sera toujours $passage le plus grand, forcément
 
 
$passage = substr($fichier_a_lire, max($passage-300,0), 300);


---------------
France Hardware | Degroup Test | Degroup News
Reply

Marsh Posté le 18-02-2006 à 18:29:46    

comment faire ?

Reply

Marsh Posté le 18-02-2006 à 18:29:53    

erel69 a écrit :

Non, là ce sera toujours $passage le plus grand, forcément
 
 
$passage = substr($fichier_a_lire, max($passage-300,0), 300);


 
lol en fait c'est 0 que je voulais marquer moi aussi...
... j'ai dû foirer je sais pas...


Message édité par dwogsi le 18-02-2006 à 18:30:10
Reply

Marsh Posté le 18-02-2006 à 18:30:46    

merci pour votre aide ca ne marche toujours pas meme avec le 0

Reply

Marsh Posté le 18-02-2006 à 18:31:34    

bah pourtant ça devrait! attend je m'en vais faire des test en local.

Reply

Marsh Posté le 18-02-2006 à 18:32:53    

http://atmakefka.free.fr/site/index.php
 
si je recherche par exemple je recherche "choix" , le mot clé n'apparait carrement pas desfois.


Message édité par atmakefka le 18-02-2006 à 18:34:45
Reply

Marsh Posté le 18-02-2006 à 18:37:24    

Oui en fait il faudrait faire
 
$passage = substr($fichier_a_lire, max($passage-250,0), 300+strlen($search));
 
par exemple


---------------
France Hardware | Degroup Test | Degroup News
Reply

Marsh Posté le 18-02-2006 à 18:37:33    

Moi je dirait plutot ça, ca marche très bien chez moi :
$passage = substr($fichier_a_lire, max($passage-150,0), 300);
 
Je pense qu'il fallait diviser la longueure de la chaîne à afficher par 2 pour que le mot soit bien au milieu donc 300/2=150 (oui oui je vous jure!)


Message édité par dwogsi le 18-02-2006 à 18:38:28
Reply

Marsh Posté le 18-02-2006 à 18:39:27    

c'est bon, merci beaucoup :)

Reply

Marsh Posté le 18-02-2006 à 18:47:55    

est ce que c'est possible avec ce script d'inclure une variable $limit pour que les resultats s'affichent sur plusieurs pages ? et non la totalité sur une seule?

Reply

Marsh Posté le 18-02-2006 à 18:53:58    

Si tu n'y connais rien en php laisse tomber la pagination ou alors si une âme charitable se sent de le faire...
Sinon oui c'est possible.


Message édité par dwogsi le 18-02-2006 à 18:54:15
Reply

Marsh Posté le 18-02-2006 à 18:55:54    

arf ok, merci

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed