Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1406 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  petit moteur de recherche - détail

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

petit moteur de recherche - détail

n°1307875
atmakefka
Posté le 17-02-2006 à 12:20:18  profilanswer
 

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
mood
Publicité
Posté le 17-02-2006 à 12:20:18  profilanswer
 

n°1307885
dwogsi
Défaillance cérébrale...
Posté le 17-02-2006 à 12:26:03  profilanswer
 

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
n°1307893
atmakefka
Posté le 17-02-2006 à 12:32:17  profilanswer
 

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

n°1307902
dwogsi
Défaillance cérébrale...
Posté le 17-02-2006 à 12:46:42  profilanswer
 

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

n°1307903
atmakefka
Posté le 17-02-2006 à 12:47:24  profilanswer
 

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

n°1307906
omega2
Posté le 17-02-2006 à 12:48:54  profilanswer
 

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

n°1307907
atmakefka
Posté le 17-02-2006 à 12:49:54  profilanswer
 

euh merci mais je ne comprends pas :(

n°1307909
omega2
Posté le 17-02-2006 à 12:53:39  profilanswer
 

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.

n°1307910
atmakefka
Posté le 17-02-2006 à 12:55:37  profilanswer
 

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

n°1307916
omega2
Posté le 17-02-2006 à 13:00:38  profilanswer
 

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é.

mood
Publicité
Posté le 17-02-2006 à 13:00:38  profilanswer
 

n°1307918
atmakefka
Posté le 17-02-2006 à 13:03:03  profilanswer
 

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

n°1307923
atmakefka
Posté le 17-02-2006 à 13:07:53  profilanswer
 

$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
n°1307945
dwogsi
Défaillance cérébrale...
Posté le 17-02-2006 à 13:35:20  profilanswer
 

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

n°1307965
chaced
Posté le 17-02-2006 à 13:53:33  profilanswer
 

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


---------------
CPU-Z | Timespy | Mes bd
n°1307981
dwogsi
Défaillance cérébrale...
Posté le 17-02-2006 à 14:06:53  profilanswer
 

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
n°1308212
atmakefka
Posté le 17-02-2006 à 16:47:58  profilanswer
 

non ca ne marche tjrs pas :(

n°1308755
atmakefka
Posté le 18-02-2006 à 18:16:04  profilanswer
 

aidez moi svp

n°1308758
erel69
Posté le 18-02-2006 à 18:21:28  profilanswer
 

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
n°1308761
atmakefka
Posté le 18-02-2006 à 18:29:46  profilanswer
 

comment faire ?

n°1308762
dwogsi
Défaillance cérébrale...
Posté le 18-02-2006 à 18:29:53  profilanswer
 

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
n°1308763
atmakefka
Posté le 18-02-2006 à 18:30:46  profilanswer
 

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

n°1308764
dwogsi
Défaillance cérébrale...
Posté le 18-02-2006 à 18:31:34  profilanswer
 

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

n°1308765
atmakefka
Posté le 18-02-2006 à 18:32:53  profilanswer
 

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
n°1308768
erel69
Posté le 18-02-2006 à 18:37:24  profilanswer
 

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
n°1308769
dwogsi
Défaillance cérébrale...
Posté le 18-02-2006 à 18:37:33  profilanswer
 

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
n°1308772
atmakefka
Posté le 18-02-2006 à 18:39:27  profilanswer
 

c'est bon, merci beaucoup :)

n°1308776
atmakefka
Posté le 18-02-2006 à 18:47:55  profilanswer
 

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?

n°1308777
dwogsi
Défaillance cérébrale...
Posté le 18-02-2006 à 18:53:58  profilanswer
 

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
n°1308778
atmakefka
Posté le 18-02-2006 à 18:55:54  profilanswer
 

arf ok, merci

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  petit moteur de recherche - détail

 

Sujets relatifs
Fonction Rechercherecherche personne maitrisant le langage flash
Recherche tutorial dev C++[RESOLU] [VBS] recherche OU d'un utilisateur donné d'Active directory
recherche programmateur RPG[HTML/Css] Recherche tous les attributs de mise en page
Aide pour petit projet en C[SQL - postgreSQL] Recherche sur des dates
cherche petit script 
Plus de sujets relatifs à : petit moteur de recherche - détail


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR