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.
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:
- Remplacer un caractere par le même en couleur
- Remplacer disque dur par ssd - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Caractère ascii - Guide
- Caractere vide - Guide
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,
- 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.
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.
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.
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 ^^
je posterai le code propre dés que j'aurai fini...