Rechercher : dans
Par :

Petit moteur de recherche en php ? Help me

Dernière réponse le 6 déc 2007 à 19:03:29 Greg, le 12 nov 2007 à 15:32:38 
 Signaler ce message aux modérateurs

Bonjour,
J'aimerais faire un moteur de recherche en php sur un seul fichier html. Par exemple, je veux rechercher le mot hello dans un fichier "bob.html" ou il y a plusieur mots hello. J'aimerais que le resultat s'affiche sous la forme suivante (Affichage du mot hello en couleur et affichage 2 lignes avant et 2 lignes apres), pour etre plus clair voici un exemple :

Resultat 1 :
blablabla
blablabla
blablabla hello blablabla
blablabla
blablabla
Resultat 2 :
blablabla
blablabla
blablabla hello blablabla
blablabla
blablabla
Resultat 3 :
blablabla
blablabla
blablabla hello blablabla
blablabla
blablabla

Je ne suis pas bon en php mais je crois qu'il faut utiliser les fonctions foreach et while. Si quelqu'un peut m'aider. Je lui en remercie d'avance.

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Petit moteur de recherche en php ? Help me » dans :
PHP - Créer un moteur de recherche Voir Idée générale Le moteur de recherche ci-dessous ne correspond qu'à une idée possible de moteur de recherche simple, ne gérant qu'un seul mot clé. Le concept du fonctionnement de ce moteur est de créer une base de donnée contenant les mots clés de...
Comment utiliser efficacement les moteurs de recherche ? VoirComment utiliser efficacement les moteurs de recherche ? Si Internet représente une masse d'informations colossale, il peut être fastidieux de trouver le renseignement que vous recherchez. Pourtant, il est possible d’optimiser ses requêtes pour...
Google - Exclure un mot de la recherche VoirLorsque l’on souhaite exclure un mot de la recherche, il suffit de faire précéder le mot exclus du signe - Exemple : animal -chien Ceci référencera les pages web comportant le mot "animal" et ne comportant pas le mot "chien".
Web - Moteur de recherche VoirIl existe une énorme quantité d'informations sur Internet (plusieurs millions ou milliards de documents), et ces informations sont pour la plupart renouvelées quotidiennement. Le moteur de recherche est un élément indispensable pour s'y...

1

Alain42, le 12 nov 2007 à 20:19:37

Bonjour,


Je t'ai fait ça, ça marche chez moi.

<html>
<?php 
$mot="hello";
$nom_fichier="bob.html";
$array_fichier=file($nom_fichier);// met le fichier ligne par ligne dans l'array
//on parcour chaque ligne
$r=1;
foreach($array_fichier as $cle=>$value){
	if(strstr($value,$mot)){ // si on trouve le mot dans la ligne
		//titre souligne:
		echo "<br><u> Resultat ".$r."</u>:<br>";
		//dans la ligne on remplace le mot par la mise en forme HTML <font color.... et le mot
		$value_modifiee = str_replace($mot, "<font color='red'>".$mot."</font>", $value);
		echo $array_fichier[$cle-2]."<br>".$array_fichier[$cle-1]."<br>";// les deux lignes avant
		echo $value_modifiee."<br>";// la ligne avec le mot en rouge
		echo $array_fichier[$cle+1]."<br>".$array_fichier[$cle+2]."<br>";// les deux lignes après
		//on increment le numero de resultat
		$r++;
	}
}
?>
</html>

Répondre à Alain42

2

Greg, le 15 nov 2007 à 10:40:52

Bonjour,
Effectivement ça marche aussi chez moi. Et je t'en remercie. Mais il y a des petits erreur que je n'arrive pas à corriger. Par exemple dans mon fichier HTML, il y a un tableau et quand je lui demande de chercher un mot dans un tableau. Le résultat est vide. Et aussi je voudrais que mon moteur de recherche fasse pas la différence entre majuscule et miniscule. Par exemple si je lui demande de chercher le mot "hello", il peut trouver dans les resultats "Hello" ou "HEllo" ou "HELLO" .... Voila mais petit soucis si quelqu'un peut m'aider. Encore merci merci merci pour avoir pris de ton temps pour moi.

Répondre à Greg

3

Alain42, le 15 nov 2007 à 11:08:30

Bonjour,

pour le pb des majuscules minuscule, je t'ai réglé ça:

(il faut remplacer les str....() par des preg_......
dans

"#".$mot."#i"
, le i veut dire ne pas tenir compte de la casse;

voici le code:

<html>
<?php 
$mot="HEllo";
$nom_fichier="bob.html";
$array_fichier=file($nom_fichier);// met le fichier ligne par ligne dans l'array
//on parcour chaque ligne
$r=1;
foreach($array_fichier as $cle=>$value){
	if(preg_match("#".$mot."#i",$value)){ // si on trouve le mot dans la ligne
		//titre souligne:
		echo "<br><u> Resultat ".$r."</u>:<br>";
		//dans la ligne on remplace le mot par la mise en forme HTML <font color....
		$value_modifiee = preg_replace("#".$mot."#i", "<font color='red'>".$mot."</font>", $value);
		echo $array_fichier[$cle-2]."<br>".$array_fichier[$cle-1]."<br>";// les deux lignes avant
		echo $value_modifiee."<br>";// la ligne avec le mot en rouge
		echo $array_fichier[$cle+1]."<br>".$array_fichier[$cle+2]."<br>";// les deux lignes après
		//on increment le numero de resultat
		$r++;
	}
}
?>
</html>


Par contre pour ton pb de tableau je ne vois pas comment est fait ton fichier, donnes moi un bout d'exemple si tu peux.

Répondre à Alain42

4

Greg, le 15 nov 2007 à 11:41:20

Merci, tu es trop rapide :) encore merci

alors j'ai fais une copie de la partie tableau du code source de ma page html :

<table border=1 cellpadding=3>
<tr><td>Bob </td><td> pecheur</td>
<tr><td>Pierre </td><td> pompier</td>
<tr><td>Jacque <td> plombier</td>
<tr><td>Gael </td><td> chirurgien</td>

</table>

Donc par exemple, quand je tape Pierre, il met resultat 1 : (avec 5 lignes blanche)

Voila
Merci Merci Merci Merci

Répondre à Greg

5

Alain42, le 15 nov 2007 à 14:56:54

Re bonjour,

C'est les tags HTML qui gênaient

je t'ai fait un fichier un peu plus complet avec le form pour saisir le mot, une fonction qui supprime les tags html au moment du traitement
et de l'affichage.

j'ai aussi traité le cas ou c'est Pierre qui est écrit dans le fichier et que tu tapes pierre, on réaffiche bien Pierre avec une majuscule, tel qu'il était dans le fichier.

<html>
<form method="post" action="moteur_php.php">
	<input type="text" name="mot_rech" value="">
	<input type="submit" name="rechercher" value="Rechercher dans le fichier">
</form>
<br><br>
<?php
//fonction qui supprime les tags html , (je l'ai recuperee sur un site)
 function stripHTMLtags($texte){
	//On retire le code HTML
	$mots = explode("<",$texte);
	$texte = "";
	$nbmots = count($mots);
	 for ($m = 0; $m < $nbmots; $m++){
		 $mot = $mots[$m];
		 $finbalise = strpos($mot,">",0);
		 if ($finbalise > 0) {
			$mot = substr($mot,$finbalise+1);
		}
		$texte .= "$mot";
	 }
	return $texte;
} 
//fin fonction

///traitement
if(isset($_POST['rechercher'])){// si le formulaire a ete poste
	echo "La r&eacute;ponse:<br>";
	$mot=$_POST['mot_rech'];
	$nom_fichier="bob2.html";
	$array_fichier=file($nom_fichier);// met le fichier ligne par ligne dans l'array
	//on parcour chaque ligne
	$r=1;
	foreach($array_fichier as $cle=>$value){
		$value_sans_html=stripHTMLtags($value);
		if(preg_match("#".$mot."#i",$value_sans_html)){ // si on trouve le mot dans la ligne
			//titre souligne:
			echo "<br><u> Resultat ".$r."</u>:<br>";
			//dans la ligne on remplace le mot par la mise en forme HTML <font color....
			// on recherche d'abord le mot avec sa casse exacte dans le fichier, pour le réafficher tel qu'il est et pas tel qu'il a ete tape
			$rech_mot=preg_match("#".$mot."#i",$value_sans_html,$matches);
			$mot_exact_trouve=$matches[0];
			$value_modifiee = preg_replace("#".$mot."#i", "<font color='red'>".$mot_exact_trouve."</font>", $value_sans_html);
			echo stripHTMLtags($array_fichier[$cle-2])."<br>".stripHTMLtags($array_fichier[$cle-1])."<br>";// les deux lignes avant
			echo $value_modifiee."<br>";// la ligne avec le mot en rouge
			echo stripHTMLtags($array_fichier[$cle+1])."<br>".stripHTMLtags($array_fichier[$cle+2])."<br>";// les deux lignes après
			//on increment le numero de resultat
			$r++;
		}
	}
}
	?>
</html>


A toi de jouer !

Répondre à Alain42

6

Alain42, le 16 nov 2007 à 09:48:41

Bonjour,

Si pb, change le nom du fichier dans:

$nom_fichier="bob2.html";


@lain

Répondre à Alain42

7

Greg, le 16 nov 2007 à 10:26:28

Bonjour,

Merci alain, je viens de le tester sur mon site et tout marche comme je le souhaitais. Un grand merci pour avoir pris de ton temps et aussi un grand merci pour avoir mis des commentaires qui m'ont beaucoup aider à comprendre. Je vais encore faire des tests pour voir si tout fonctionne parfaitement et je te tiendrais au courant.

MERCI !!!

Répondre à Greg

8

Greg, le 22 nov 2007 à 19:14:17

Bonjour,

Je souhaiterais améliorer encore un peu mon moteur de recherche mais j'ai du mal. J'aimerais qu'une fois ma recherche réalisée, il y ait le nombre de resultat afficher (exemple : il y a 40 resultats du mot bob). Et aussi je comprend pas, je sais pas si c'est normal ou pas mais quand je tape mon mot dans la case et que je tape ensuite sur entrer, ça passe a la ligne en dessous et ça lance pas la recherche du mot (je sais pas si je suis clair) mais en gros pour faire une recherche je suis obligé de prendre la souris et cliquez sur le bouton Rechercher.

Merci,
Belle soirée

Répondre à Greg

9

Alain42, le 24 nov 2007 à 18:49:04

Salut Greg,

quand je tape mon mot dans la case et que je tape ensuite sur entrer, ça passe a la ligne en dessous et ça lance pas la recherche du mot

C'est normal, la touche entrée soumet bien le formulaire, mais dans mon code je teste que le bouton "Rechercher... " a bien été cliqué, je te modifie ça

une fois ma recherche réalisée, il y ait le nombre de resultat afficher
pas de pb je te fais ça, le résultat sera affiché à la fin, pour l'afficher avant la liste, c'est un peu plus compliqué

Voilà:

<html>
<form method="post" action="moteur_php.php">
	<input type="text" name="mot_rech" value="">
	<input type="submit" name="rechercher" value="Rechercher dans le fichier">
</form>
<br><br>
<?php
//fonction qui supprime les tags html , (je l'ai recuperee sur un site)
 function stripHTMLtags($texte){
	//On retire le code HTML
	$mots = explode("<",$texte);
	$texte = "";
	$nbmots = count($mots);
	 for ($m = 0; $m < $nbmots; $m++){
		 $mot = $mots[$m];
		 $finbalise = strpos($mot,">",0);
		 if ($finbalise > 0) {
			$mot = substr($mot,$finbalise+1);
		}
		$texte .= "$mot";
	 }
	return $texte;
} 
//fin fonction

///traitement
if(isset($_POST['rechercher']) || $_POST['mot_rech'] !=""){// si le formulaire a ete poste
	echo "La r&eacute;ponse:<br>";
	$mot=$_POST['mot_rech'];
	$nom_fichier="bob2.html";
	$array_fichier=file($nom_fichier);// met le fichier ligne par ligne dans l'array
	// i,itialisation des variables
	$r=1;
	$nb_trouves=0;
	//on parcourt chaque ligne
	foreach($array_fichier as $cle=>$value){
		$value_sans_html=stripHTMLtags($value);
		if(preg_match("#".$mot."#i",$value_sans_html)){ // si on trouve le mot dans la ligne
			$nb_trouves ++;  // on incremente le nb
			//titre souligne:
			echo "<br><u> Resultat ".$r."</u>:<br>";
			//dans la ligne on remplace le mot par la mise en forme HTML <font color....
			// on recherche d'abord le mot avec sa casse exacte dans le fichier, pour le réafficher tel qu'il est et pas tel qu'il a ete tape
			$rech_mot=preg_match("#".$mot."#i",$value_sans_html,$matches);
			$mot_exact_trouve=$matches[0];
			$value_modifiee = preg_replace("#".$mot."#i", "<font color='red'>".$mot_exact_trouve."</font>", $value_sans_html);
			echo stripHTMLtags($array_fichier[$cle-2])."<br>".stripHTMLtags($array_fichier[$cle-1])."<br>";// les deux lignes avant
			echo $value_modifiee."<br>";// la ligne avec le mot en rouge
			echo stripHTMLtags($array_fichier[$cle+1])."<br>".stripHTMLtags($array_fichier[$cle+2])."<br>";// les deux lignes après
			//on increment le numero de resultat
			$r++;
		}
	}
	echo "<br><br>Le mot <font color='red'><b>$mot</b></font> a &eacute;t&eacute; trouv&eacute <b>$nb_trouves</b> fois.";
}
	?>
</html>


@lain

Répondre à Alain42

10

Greg, le 28 nov 2007 à 19:42:50

Bonjour alain,

J'ai toujours quelques difficultés en php. J'aimerais savoir si il était possible que tu me fournisses ton adresse email pour pouvoir communiquer directement via email au lieu de passer par ce forum. Merci

Cordialement

Répondre à Greg

11

Alain42, le 28 nov 2007 à 21:14:57

Bonsoir,

si je peux t'aider.

alain4208 arobase orange.fr

@lain

Répondre à Alain42

12

Greg, le 4 déc 2007 à 23:59:29

Bonsoir,

Apparament votre adresse ne fonction pas :(

Cordialement,
Greg

Répondre à Greg

13

Alain42, le 6 déc 2007 à 17:18:53

Si elle fonctionne, il suffit de remplacer arobase par @

@lain

Répondre à Alain42

14

 Greg, le 6 déc 2007 à 19:03:29

Bonjour,

Je ne comprend pas, je vous ai envoyé 3 mails sur cette adresse

alain4208 arobase orange.fr

en remplaçant bien le arobase par @

:(

je vous passe mon adresse : josepe38 arobase free.fr

Merci

Répondre à Greg
Collection CommentÇaMarche.net