Remplacer un caractere par le même en couleur
DoI3y
Messages postés
57
Statut
Membre
-
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.
--
Moi zeme bien se forum !!!!
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.
--
Moi zeme bien se forum !!!!
Configuration: Windows Vista Firefox 3.0.10
1 réponse
-
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.-
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 ^^
-