Remplacer un caractere par le même en couleur

DoI3y Messages postés 57 Statut Membre -  
DoI3y Messages postés 57 Statut Membre -
Bonjour,

Voila j'ai créer un moteur de recherche en php & my sql et je souhaiterai que le ou les mots rechercher(s) change de couleurs lorsque je listes mes resultats...

Voila un bout de script que j'ai créer :


$recherche "comment ca marche";
$mots = explode(" ", $recherche); //séparation des mots
$nombre_mots = count ($mots); //compte le nombre de mots
$valeur_requete = '';
for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
{
$valeur_requete .= "" . $and_ou_or . " $variable1 LIKE \"%" . $mots[$nombre_mots_boucle] . "%\"";
$valeur_requete .= " " . $and_ou_or . " $variable2 LIKE \"%" . $mots[$nombre_mots_boucle] . "%\"";
$remplacements = array($mots[$nombre_mots_boucle] =>'<font color="red">'.$mots[$nombre_mots_boucle].'</font>');
}
$valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle

$selection_recherche = mysql_query("SELECT COUNT(*) AS nb_resultats FROM $nom_tables WHERE $valeur_requete ORDER BY $id_demandee DESC");

$sql_recherchee = "SELECT * FROM $nom_tables WHERE $valeur_requete ORDER BY $id_demandee DESC";

$selection_recherche2 = mysql_query($sql_recherchee);
echo '<br>';

$donnees_retour = mysql_fetch_array($selection_recherche);
$nombre_resultats = $donnees_retour['nb_resultats'];

if ($nombre_resultats == 0) //s'il n'y a pas de résultat
{
echo 'Il y a aucun resultat dans la recherche que vous avez demandée. <a href="recherche.php">Cliquez ici</a> pour recommecer.';
}
else //il y a au moins un résultat
{
echo 'Il y a ' . $nombre_resultats . ' résultat pour ce critére de recherche ("'.$recherche.' dans la catégorie '.$table.'") :<br /><br /><hr>'; //nombre de résultats
echo '<table>';
while($resultats = mysql_fetch_array($selection_recherche2) ) //boucle affichant les résultats
{
echo '<tr><td width="100px"><strong>'.$variable1.' : </strong></td><td> <a href="'.$page_demandee.'">' .strtr($resultats[$variable1], $remplacements). '</a></td></tr>';
echo '<tr><td valign="top"><strong>'.$variable2.' : </strong></td><td> ' .strtr($resultats[$variable2], $remplacements). '...</td></tr>';
echo '<tr><td colspan="2"><hr></td></tr>';
}
echo '</table><br><br>';


Je précise que mon script fonctionne parfaitement mais les mots de ma variable $recherche ne sont pas en rouge comme jle demande... Pourquoi ???

merci d'avance.
A voir également:

1 réponse

P@t@ch0n Messages postés 603 Statut Membre 85
 
Ton script est à revoir de a à z.

Faire un système de recherche avec LIKE, c'est moche :/
MySQL fournit le full text, autant s'en servir.

Ensuite,
$recherche "comment ca marche"; 
$mots = explode(" ", $recherche); //séparation des mots 
$nombre_mots = count ($mots); //compte le nombre de mots 
$valeur_requete = ''; 
for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois 
{ 
$valeur_requete .= "" . $and_ou_or . " $variable1 LIKE \"%" . $mots[$nombre_mots_boucle] . "%\""; 
$valeur_requete .= " " . $and_ou_or . " $variable2 LIKE \"%" . $mots[$nombre_mots_boucle] . "%\""; 
$remplacements = array($mots[$nombre_mots_boucle] =>'<font color="red">'.$mots[$nombre_mots_boucle].'</font>'); 
}
- Tu dois te servir d'une expression régulière pour capturer les mots, car si un malin s'amuse à mettre 50 espaces entre chaques mots...
- Ce n'est pas à ce stade du script que tu dois t'occuper de mettre en couleur les mots.
- Par pitié, protège tes valeurs dans ta requete.
$selection_recherche = mysql_query("SELECT COUNT(*) AS nb_resultats FROM $nom_tables WHERE $valeur_requete ORDER BY $id_demandee DESC"); 

$sql_recherchee = "SELECT * FROM $nom_tables WHERE $valeur_requete ORDER BY $id_demandee DESC";
Pourquoi faire un COUNT sachant qu'un mysql_num_rows() te renverra le nombre de résultat ?

C'est une fois que des résultats ont été trouvés que tu dois t'occuper de l'affichage, toujours avec une expression régulière, un str_replace() pouvant remplacer un mot contenu dans un autre.
1
DoI3y Messages postés 57 Statut Membre 24
 
OK je vais revoir on script avec des full text ^^
pour la sécurisation des données j'ai completment zappé pour cette page donc je te remercie bien car c'est trés important...
pour le mysql_num_rows, j'avais déjà essayé dans se script tout d'abord parsque c plus simple mé le code est vachement + propre mais le probleme c''est que le code ne fonctionner pas...

je vais donc revoir tout sa et si j'ai un bleme j'reposterai ;p

merci PATOCHON ^^
0
DoI3y Messages postés 57 Statut Membre 24 > DoI3y Messages postés 57 Statut Membre
 
o faite le code que j'ai noter fonctionne aujourd'hui mais n'est pas trés propre ^^
je posterai le code propre dés que j'aurai fini...
0