petit moteur de recherche - détail - PHP - Programmation
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 |
Marsh Posté le 17-02-2006 à 12:32:17
merci mais ca ne marche pas, le mot recherche n'apparait plus
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....
Marsh Posté le 17-02-2006 à 12:48:54
http://fr.php.net/manual/fr/function.min.php
Les valeurs à donner à la fonction coulent de source je pense.
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.
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 ?
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é.
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
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
Marsh Posté le 17-02-2006 à 13:35:20
ReplyMarsh Posté le 17-02-2006 à 14:06:53
Et ya pas de gestion du timeout... Si ya beaucoup de fichiers ça bloque.
Marsh Posté le 18-02-2006 à 18:21:28
dwogsi a écrit : $passage = substr($fichier_a_lire, max($passage-300,$passage), 300); |
Non, là ce sera toujours $passage le plus grand, forcément
$passage = substr($fichier_a_lire, max($passage-300,0), 300);
Marsh Posté le 18-02-2006 à 18:29:53
erel69 a écrit : Non, là ce sera toujours $passage le plus grand, forcément |
lol en fait c'est 0 que je voulais marquer moi aussi...
... j'ai dû foirer je sais pas...
Marsh Posté le 18-02-2006 à 18:30:46
merci pour votre aide ca ne marche toujours pas meme avec le 0
Marsh Posté le 18-02-2006 à 18:31:34
bah pourtant ça devrait! attend je m'en vais faire des test en local.
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.
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
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!)
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?
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.
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ésultats pour la requê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é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