boucle while et tableau

nab
Petit nouveau ! | 4 Messages

18 févr. 2005, 05:01

Bonjour,

1) j'ai stocké plusieurs valeurs dans un tableau en utilisant la fonction explode()
$str="val1 val2 val3....";
                $array=explode(" ", $str);
                $nombre_element=count($array);
2) j'affiche tous les enregistrements d'une table contenant au moins une de ces valeurs
$q="SELECT * FROM ma_table WHERE mon_champ like '%".$array['0']."%'";
                for ($i=1; $i<$nombre_element; $i++)
                {
                                $q.=" AND mon_champ like '%".$i."%' ";
                }
                $q.="mon_champ like '%".$array[$nombre_element]."%'";
	
                $res=mysql_query($q);
                while ($row=mysql_fetch_array($res))
                {
                                echo $row['mon_champ'];
                }
3) c'est maintenant que ça se complique pour moi car je souhaite remplacer $array[$i] contenu dans les enregistrements par $array[$i] en gras. (
str_replace($array[$i], <b>$array[$i]</b>, $row[mon_champ])
)

Toute aide sera la bienvenue.

Merci d'avance,

Nab

message édité par ermelir: prefere l'utilisation des bbcodes php pour mettre du code plutot que de la couleur, c'est plus lisible

Mammouth du PHP | 19672 Messages

18 févr. 2005, 09:57

Salut,
à première vue, ta requête a toute les chances de ne te donner aucune réponse : pour avoir les information en fonction d'au moins UN des éléments de ton tableau, il faudrait remplacer le AND de ta requête SQL par OR;
Ensuite, tu ajoutes en fin de requête $array[$nombre_element], index qui n'existe pa si le premier indice est 0: en effet, si tu as 4 éléments par exemple, tu auras $array[0], $array[1], $array[2], $array[3]; le nombre d'éléments est bien 4, mais $array[4] n'existe pas.
Pour terminer, je ne saisis pas trop où est la difficulté pour mettre une chaîne de caractères en gras... qu'est-ce qui te semble compliqué au juste ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 334 Messages

18 févr. 2005, 10:36

En dehors de ta requete qui est fausse (expliqué par Cyrano) :

Pour mettre en gras :

Code : Tout sélectionner

$res=mysql_query($q); while($row=mysql_fetch_array($res)) { echo '<br /><strong>'.$row['mon_champ'].'</strong>'; }

nab
Petit nouveau ! | 4 Messages

18 févr. 2005, 22:58

en effet pour le and je me suis planté dans le message. j'ai bien mis or.
Sinon j'ai trouvé la réponse à mon probleme.
Pour ce que ça intéreese voilà ce que j'ai fait.
$keyword="val1 val2 ect....";
$keyword=explode(" ", $keyword);

$q="SELECT * FROM ma_table WHERE mon_champ like '%val1%' OR mon_champ like '%val1%' OR mon_champ like '%val3%' etc..." ;
$res=mysql_query($q);


function met_le_bold(&$item)
{
	$item="<b>".$item."</b>";
} 

// fait une copie de $array
$replace=$keyword; 

// ajoute le bold a tous les éléments de la copie
array_walk($replace,'met_le_bold'); 


while ($row=mysql_fetch_array($res))
{
	
	$mon_champ=str_replace($keyword,$replace,$row['mon_champ']); 

	echo $mon_champ;
}

nab
Petit nouveau ! | 4 Messages

18 févr. 2005, 23:01

en fait je ne voulais pas mettre tous le champs en gras (comme le fait Jerem's) mais juste les valeurs de tableau susceptibles de se trouver dans le contenu du champ.

Nab

Eléphant du PHP | 334 Messages

19 févr. 2005, 12:50

Tu peux cliquer sur résolu :wink:

nab
Petit nouveau ! | 4 Messages

19 févr. 2005, 14:11

ok merci

Nab