RECHERCHE PAR MOTS CLEFS - DÉCOUPAGE D'UNE PHRASE EN MOTS - RECHERCHE ET COLORAT

cs_iomega Messages postés 144 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 1 septembre 2008 - 9 déc. 2005 à 09:12
camelion_ Messages postés 11 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 29 janvier 2010 - 2 déc. 2007 à 13:19
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34992-recherche-par-mots-clefs-decoupage-d-une-phrase-en-mots-recherche-et-coloration-des-mots-d-un-texte

camelion_ Messages postés 11 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 29 janvier 2010
2 déc. 2007 à 13:19
salut
se sont de tres bon codes que tu a la
je cherche a modifier un ficher en cherchant des mots clef que je veux
ces mots seront stoké dans un tableau
tout ce que j'en ai besoin c'est :'comment parcourir une chaine de caracteres et stoké les mots delimiter par des caractere speciaux comme < et > dans un tableau '
par la suite j'utiliserai ma fonction qui est comme suit

function replaceChaine($Texte,$Tchamps,$Ttaille){
/*
$text =>le texte ou on fera la reherce
$Tchamps => tableau des carracteres a modifier
$Ttaille => la taille de tableau contenant les elements a modifier
*/
for($i=0;$i<$Ttaille;$i++){
$champs=$Tchamps[$i];//la chaine a remplacer
$Texte = ereg_replace($champs,"\\0",$Texte);
}//end for
echo"$Texte";
}//end function
brex74 Messages postés 4 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 8 octobre 2007
8 oct. 2007 à 12:48
Bonjour, je ne sais pas si je m'y prend mal ou quoi mais chez moi le résultat est plutôt décevant.
Visuellement la coloration marche très bien mais lorsque je regarde le code html généré, c'est un peu plus délicat.
Pour un tableau de mot passé en paramètres :
var $mon_array = array('/flash/', '/2D/','/illustration/', Animations Flash/');
$mots_cles_color ="2D";

j'execute la fonction comme ceci :

$mots_cles = colorer($mots_cles_color, $mon_array);

et je récupère le résultat html suivant : (j'ai changé la source en modifiant le par un

flash, 2D, illustration, Animations Flash

Est-ce bien normal ? Je crois que seul le mot "2D" dois être entouré par le mais je ne vois pas d'ou viens l'erreur...

Merci de votre aide.

brex
cs_iomega Messages postés 144 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 1 septembre 2008
9 déc. 2005 à 15:34
Ok merci beaucoup a+
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
9 déc. 2005 à 15:22
POUR L'AFFICHAGE DE L'EXEMPLE :
Faites comme ça (et en plus ce sera plus joli) :

/*---------------- remplacement -----------------*/
echo 'Résultat de la recherche :';
echo '';
$i=1;
while( $d = mysql_fetch_assoc($res) ) {
echo \"Resultat {$i++}
\n\";
$d = colorer($m, $d, '@Id|pouet@');
foreach( $d as $k=>$v ) echo \" * $k : $v\n";
}
echo '
';
/*----------- fin du remplacement ----------------*/
cs_iomega Messages postés 144 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 1 septembre 2008
9 déc. 2005 à 14:58
Désolé, mais effectivement j'ai changer ta ligne
//echo str_replace('',' ',nl2br(print_r($d, true)));
par
echo str_replace('',' ',nl2br(print($d)));
car j'avais ce message d'erreur Warning: Wrong parameter count for print_r()
cs_iomega Messages postés 144 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 1 septembre 2008
9 déc. 2005 à 14:54
Hello oui , j'ai juste ajouter mes champs, il m'affiche bien le nombre de ligne exacte de ma requete mais il me retourne pour chaque ligne array1
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
9 déc. 2005 à 14:47
malalam => tu as raison... indégnable

Iomega => Non, aucune idée... Mais tu n'as pas pu utiliser mon exemple tel quel ! Alors, qu'as tu fais ? (PS : correspond par messages)
cs_iomega Messages postés 144 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 1 septembre 2008
9 déc. 2005 à 14:31
Hello j'ai essayé ton exemple mais voici le resultat
Array1
As-tu une idée ?
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
9 déc. 2005 à 13:37
FhX => si tu veux...

Quoique non !
Pour ne pas colorer les champs avec des '0' (zéro) tu peux entrer la regexp suivante : '0' (oui, tu peux aussi faire '/0/', mais '0' le fait)
Idem : si on ne veut pas colorer les champs avec des espaces ' '.

Et par malheur (' '==false) et ('0'==false) sont vraies.

Bon, le mec qui rentre ce genre de RegExp cherche un peu la bagarre, d'accord! Enfin, on peut tomber sur des tarés ! (moi même... défois)

autant bien différencier la varialbe par défaut d'une variable entrée.


A+
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 déc. 2005 à 13:25
"if( $avoid!==false and is_array($texte) ) {"

>
if ( $avoid and is_array($texte) ) {
Pas besoin de mettre !== false dans ce cas la :)


Pas mal du tout :)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
9 déc. 2005 à 12:36
C'est très joli :-)
Rien à redire pour le moment, à priori :-)
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 9
9 déc. 2005 à 12:02
<?php
////////////////////////////
// Exemeple D'utilisation //
////////////////////////////




/* !!!!! Pour éviter l'injection SQL (techinque de hacking) !!!!! */
/* !!!!! N'OUBLIER PAS D'ECHAPPER LES DONNEES PROVENANT DU CLIENT !!!!! */
/* !!!!! avec stripslashes() ou mysql_real_escape() ou ... !!!!! */



// définitions
$texte = (isset($_POST['texte']) ? ''; // provient d'un formulaire !!!
$champs = array( Id, Sujet, Message, pouet ); // peut provenir du formulaire
$table = 'maTable'; // peut aussi vernir du formulaire...
$order = 'Id asc'; // idem

// constitution de la requète
$mots = mots($texte);
$cond = '1'; // par défaut : pas de condition
$sel = '*'; // par défaut, tous les champs de la table

foreach( $champs as $c ) {

if($cond!='1') $cond.= ' or ';
foreach( $mots as $m ) {
if($cond=='1') $cond = '';
else $cond.= ' or ';
$cond.= "$c like'%$m%'";
}

if($sel=='*') $sel = '';
else $sel = ', ';
$sel = $c;
}

// votre condition pour sécurisé l'attaque de la base ! ('1' si aucune)
$secure = "Utilisateur='$?' and Archive='0' and Date>='$mois_dernier'";

// La requete, enfin !
$query = "select $sel
from $table
where ($cond) and ($secure)
order by $order;";
$res = mysql_queyr($query);


// Affichage (vite fait, mal fait)
echo 'Résultat de la recherche :';
while( $d = mysql_fetch_assoc($res) ) {
echo "<hr />\n";
// coloration
$d = colorer($m, $d, '@Id|pouet@'); // <= ne colore pas 'Id' et 'pouet'
echo str_replace('',' ',nl2br(print_r($d, true)));
}

//////////////////////
// Fin de l'exemple //
//////////////////////
?>


Voilà, ça constituerait presque une autre petite source ;)

A+
cs_iomega Messages postés 144 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 1 septembre 2008
9 déc. 2005 à 09:12
Hello et bravo pour ta source peux-tu donner un exemple avec une requête sql et comment utiliser ces fonctions ?merci car je suis débutant.
Rejoignez-nous