|
|
|
|
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
Bonjour,
<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>
|
Bonjour,
|
Bonjour,
"#".$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. |
Merci, tu es trop rapide :) encore merci
|
Re bonjour,
<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é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 ! |
Bonjour,
|
Bonjour,
|
Salut Greg,
<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é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 été trouvé <b>$nb_trouves</b> fois.";
}
?>
</html>
@lain |