Page 1 sur 1

boucle while et tableau

Posté : 18 févr. 2005, 05:01
par nab
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

Posté : 18 févr. 2005, 09:57
par Cyrano
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 ?

Re: boucle while et tableau

Posté : 18 févr. 2005, 10:36
par Jerem'
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>'; }

Posté : 18 févr. 2005, 22:58
par nab
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;
}

Posté : 18 févr. 2005, 23:01
par nab
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

Posté : 19 févr. 2005, 12:50
par Jerem'
Tu peux cliquer sur résolu :wink:

Posté : 19 févr. 2005, 14:11
par nab
ok merci

Nab