Colorer les résultats de recherche

Eléphant du PHP | 333 Messages

16 nov. 2006, 06:23

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.
Ce n'est pas toujours facile d'essayer, mais c'est toujours vallorisant lorsqu'on y arrive !!!

Apprenez, ne le faite pas faire par les autres.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

16 nov. 2006, 10:25

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 ;)

Eléphant du PHP | 333 Messages

16 nov. 2006, 17:13

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>
<?	} ?>
												
Ce n'est pas toujours facile d'essayer, mais c'est toujours vallorisant lorsqu'on y arrive !!!

Apprenez, ne le faite pas faire par les autres.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

16 nov. 2006, 17:41

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.

Eléphant du PHP | 333 Messages

16 nov. 2006, 22:18

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
Ce n'est pas toujours facile d'essayer, mais c'est toujours vallorisant lorsqu'on y arrive !!!

Apprenez, ne le faite pas faire par les autres.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

16 nov. 2006, 23:23

Qu'est-ce que tu affiches exactement dans ton résultat ?

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

Eléphant du PHP | 333 Messages

17 nov. 2006, 00:12

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,
Ce n'est pas toujours facile d'essayer, mais c'est toujours vallorisant lorsqu'on y arrive !!!

Apprenez, ne le faite pas faire par les autres.

Mammouth du PHP | 1776 Messages

17 nov. 2006, 00:49

Envoi ton code modifié... :roll:

Eléphant du PHP | 333 Messages

17 nov. 2006, 01:46

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
Ce n'est pas toujours facile d'essayer, mais c'est toujours vallorisant lorsqu'on y arrive !!!

Apprenez, ne le faite pas faire par les autres.

Eléphant du PHP | 333 Messages

17 nov. 2006, 01:49

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é
Ce n'est pas toujours facile d'essayer, mais c'est toujours vallorisant lorsqu'on y arrive !!!

Apprenez, ne le faite pas faire par les autres.

Mammouth du PHP | 1776 Messages

17 nov. 2006, 09:21

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 nov. 2006, 10:33

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>" 
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 1776 Messages

17 nov. 2006, 11:54

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:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

17 nov. 2006, 12:27

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... ;) :-*

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 nov. 2006, 12:28

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 ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...