Page 1 sur 2

Colorer les résultats de recherche

Posté : 16 nov. 2006, 06:23
par auclairp
Boujour tous,

Je me suis fait un petit moteur de recherche, tout simple, mais j'aimerais que dans le résultat. le mot recherché soit coloré

ex. recherche du mot "PHPFrance"

1. Allez voir PHPFrance.
2. Vive PHPFrance.
3. On trouve toujours tout sur PHPFrance.

Merci de votre aide.

Posté : 16 nov. 2006, 10:25
par charabia
As-tu essayé d'utiliser une fonction de remplacement avant d'afficher la requête ?

Remplacer par exemple le mot recherché par <span class="blabla">mot</span> ? Ce qui fait qu'à la sortie tu auras tous les mots recherchés qui seront d'un autre style.

Juste une tite astuce, il y a sans doute mieux ;)

Posté : 16 nov. 2006, 17:13
par auclairp
As-tu essayé d'utiliser une fonction de remplacement avant d'afficher la requête ?

Remplacer par exemple le mot recherché par <span class="blabla">mot</span> ? Ce qui fait qu'à la sortie tu auras tous les mots recherchés qui seront d'un autre style.

Juste une tite astuce, il y a sans doute mieux ;)
oui je comprend . j'ai essayer avec la fonction str_replace mais je suis pas certain de savoir comment l'utiliser, j'ai essayer plusieurs manières d'après les explications trouvées sur le web ???
<?
$keywords = $_POST["recherche"];

	$sql = "SELECT description.code, description.nom, description.nomfr, description.genre, description.description, description.video, loan.loanto, loan.date_out, loan.date_in 
			FROM loan RIGHT JOIN description 
			ON description.code=loan.code
			WHERE   description.code LIKE '%".$keywords."%' OR 
					description.nom LIKE '%".$keywords."%' OR 
					description.nomfr LIKE '%".$keywords."%' OR 
					loan.loanto LIKE '%".$keywords."%' 
			ORDER BY ".$order."";
				
	$resultat = mysql_query($sql);

        while ($rows=mysql_fetch_array($resultat))
	{  
	
	?>
		<tr class="resultat">		
			<td class="image">	<? if ($showimg=="oui")
									{			
										$image = (file_exists("thumb/".$rows['code'] ."_t.jpg")) ? "thumb/".$rows['code'] ."_t.jpg" : "thumb/defaut.jpg";
										$b_image = (file_exists("thumb_b/b_".$rows['code'] .".jpg")) ? "thumb_b/b_".$rows['code'] .".jpg" : "thumb/defaut.jpg";?>
										<A HREF="#" onClick="window.open('<? echo $b_image; ?>','_blank',' width=410, height=500');return(false)"><?echo('<img src="'.$image.'" border="0" >');?></a>
								<?	}?>
			</td>	 
			<td class="code"><? echo $rows['code']; ?></td>
			<td class="titre"><b><a href="infodvd.php?code=<? echo $rows['code']; ?>"><? echo $rows['nom']; if ($rows['video']== true){?><a href="infodvd.php?code=<? echo $rows['code']; ?>#video"><img src="images/video.jpg" border="0" height="20"></a><?}?><br><div class="description"><b><? echo $rows['nomfr']; ?></b></div></a></b>
	

........//

</td>
		</tr>
<?	} ?>
												

Posté : 16 nov. 2006, 17:41
par charabia
En fait en gros c'est un peu ce contexte :
$chaine_sortie = ereg_replace($mot_recherche, $mot_de_remplacement, $chaine);
Donc pour toutes tes sorties tu peux appliquer cette étape.

Posté : 16 nov. 2006, 22:18
par auclairp
En fait en gros c'est un peu ce contexte :
$chaine_sortie = ereg_replace($mot_recherche, $mot_de_remplacement, $chaine);
Donc pour toutes tes sorties tu peux appliquer cette étape.
Oui ca je le comprend bien, mais comment je l'incorpore à mon code, où le mettre et d'après mes donnée de code comment l'inclure. c'est ca que je ne comprend pas.

J'ai essayer avec cette fonction, mais ca na pas fonctionner, et j'ai essayer de plusieurs manières

Posté : 16 nov. 2006, 23:23
par charabia
Qu'est-ce que tu affiches exactement dans ton résultat ?

Ce sont les champs code, nom...etc ?

Posté : 17 nov. 2006, 00:12
par auclairp
Qu'est-ce que tu affiches exactement dans ton résultat ?

Ce sont les champs code, nom...etc ?
Voici tout mon code
<?
// SÉLECTION RECHERCHE PAR MOTS CLEFS //
if(isset($_POST['rechercher'])) // POST RECHERCHER
{
	$afficher1 = 1;
	$showimg = $_POST['showimg'];
	$showinfo = $_POST['showinfo'];
	$order = $_POST['order'];
		
	$keywords = $_POST["recherche"];

	$sql = "SELECT description.code, description.nom, description.nomfr, description.genre, description.description, description.video, loan.loanto, loan.date_out, loan.date_in 
			FROM loan RIGHT JOIN description 
			ON description.code=loan.code
			WHERE   description.code LIKE '%".$keywords."%' OR 
					description.nom LIKE '%".$keywords."%' OR 
					description.nomfr LIKE '%".$keywords."%' OR 
					loan.loanto LIKE '%".$keywords."%' 
			ORDER BY ".$order."";
	
	$resultat = mysql_query($sql);
	
} // IF RECHERCHER 

else {}

if($afficher1 == 1)
{ ?>
 
	<tr class="onglet">
		<td class="dvd-image"></td>
		<td class="dvd-code">CODE</td>
		<td class="dvd-titre">TITRE</td>
		<td class="dvd-genre">GENRE</td>
		<td class="dvd-loan">LOUER À</td>
	</tr>
	<span class="recherche">the</span>
<? 
}	   		

if (mysql_num_rows($resultat) >= 1)	

	while ($rows=mysql_fetch_array($resultat))
	
	{  
	?>
		<tr class="resultat">		
			<td class="image">	<? if ($showimg=="oui")
									{			
										$image = (file_exists("thumb/".$rows['code'] ."_t.jpg")) ? "thumb/".$rows['code'] ."_t.jpg" : "thumb/defaut.jpg";
										$b_image = (file_exists("thumb_b/b_".$rows['code'] .".jpg")) ? "thumb_b/b_".$rows['code'] .".jpg" : "thumb/defaut.jpg";?>
										<A HREF="#" onClick="window.open('<? echo $b_image; ?>','_blank',' width=410, height=500');return(false)"><?echo('<img src="'.$image.'" border="0" >');?></a>
								<?	}?>
			</td>	 
			<td class="code"><? echo $rows['code']; ?></td>
			<td class="titre"><b><a href="infodvd.php?code=<? echo $rows['code']; ?>"><? echo $rows['nom']; if ($rows['video']== true){?><a href="infodvd.php?code=<? echo $rows['code']; ?>#video"><img src="images/video.jpg" border="0" height="20"></a><?}?><br><div class="description"><b><? echo $rows['nomfr']; ?></b></div></a></b>
														
							<? if ($showinfo=="oui")
									{ ?>
									<div class="description"><? echo $rows['description']; ?></div>
							<? 		} ?>
			</td>
			
			<td class="genre"><? echo $rows['genre']; ?></td>
			<td class="loan"><? if ($rows['loanto']==false)
								{ 
								echo '<img src="images/yes.jpg" border="0" width="18" height="16"> <br>Disponible</a>';
								} 
								elseif ($rows['loanto']==true)
								{ 
								echo '<img src="images/no.png" border="0"> <br>Non Disponible</a>';
								} 
								?></td>
		</tr>
<?	}



Il est pas super bien coder, mais il fonctionne, juste l'affaire de colorer le mot de recherche que je n'arrive pas.

La ligne:
$chaine_sortie = ereg_replace($mot_recherche, $mot_de_remplacement, $chaine);
n'y est pas, je l'ai essayer à plusieur place en modifiant les variable, mais ca ne fonctionnait pas,

Posté : 17 nov. 2006, 00:49
par DocType
Envoi ton code modifié... :roll:

Posté : 17 nov. 2006, 01:46
par auclairp
En voici un que j'ai essayer, résultat, il remplace tout par des A et même pas en rouge
<?
while ($rows1=mysql_fetch_array($resultat))
	$rows = ereg_replace($keywords, "<font color='#ff0000'>$keywords</font>", $rows1); 
	{  
?>
J'ai mis juste la partie pour allèger la page d'ici

Posté : 17 nov. 2006, 01:49
par auclairp
Essayer comme ceci aussi
<?
$resultat1 = ereg_replace($keywords, "<font color='#ff0000'>$keywords</font>", $resultat);
	while ($rows=mysql_fetch_array($resultat1))
	{
	?>
Là, plus de résultat, comme si la bdd était vide, mais la page s'affiche, il n'y a pas d'erreur d'affiché

Posté : 17 nov. 2006, 09:21
par DocType
1. tu essaies de remplacer les éléments d'un tableau et non pas d'une chaine de caractères, normal que cela ne fonctionne pas.

2.
"<font color='#ff0000'>$keywords</font>",
n'est pas correct
"<font color='#ff0000'>".$keywords."s</font>", 
est mieux

3. oublie pas de définir $keywords

Posté : 17 nov. 2006, 10:33
par zeus
2.
"<font color='#ff0000'>$keywords</font>",
n'est pas correct
"<font color='#ff0000'>".$keywords."s</font>", 
est mieux
Juste une petite précision :oops:
"<font color='#ff0000'>$keywords</font>"
est correct, sera correctement interprété par le parseur PHP mais, effectivement, je trouve qu'il est mieux d'écrire
"<font color='#ff0000'>".$keywords."s</font>" 

Posté : 17 nov. 2006, 11:54
par DocType
C'est bien là ce que je souhaitais dire (mais mal formulé). Quand on voit la différence de rapidité, on comprend quelle méthode est la meilleure :wink:

Posté : 17 nov. 2006, 12:27
par albat
Chic, chic, une querelle de méticuleurs de mouches ! :lol:

Ma contribution :
Ce n'est pas parce que
"<font color='#ff0000'>$keywords</font>"
fonctionne, que c'est correct.
C'est opérationnel, mais incorrect. C'est une tolérance.

La syntaxe à utiliser est :
"<font color='#ff0000'>".$keywords."</font>"
Sauf que la balise <font> est completly deprecated... ;) :-*

Posté : 17 nov. 2006, 12:28
par Ryle
C'est bien là ce que je souhaitais dire (mais mal formulé). Quand on voit la différence de rapidité, on comprend quelle méthode est la meilleure :wink:
Il y a vraiment une différence significative de temps d'exécution entre les deux ? (qui ne s'exprime pas en micro secondes :))

Personnellement j'opte également pour sortir les variables des chaines texte, d'une part parce que j'ai des habitudes java, d'autre part parce qu'avec la coloration syntaxique, ca permet de mieux les voir, et puis surtout parce que je préfère avoir des guillemets autour de mes attributs html et ne supporte pas de surcharger le code avec des antislash... du coup mes chaines sont entourées d'apostrophes et j'ai pas d'autre choix que de sortir mes variables ;)