Couleur de texte en fonction d'une valeur php

Fermé
Graig083 - 16 sept. 2011 à 14:51
 Graig083 - 22 sept. 2011 à 23:37
Bonjour,

J'aimerais savoir comment définir la couleur d'un texte dans un tableau php lié à une base de données mysql en fonction de la valeur d'une donnée, du style :
base de données = nom, prénom, coordonnées, statut de la commande
conditions = si la valeur "statut de la commande" est "en cours", je voudrais que le texte s'affiche en rouge, s'il est "en préparation" -> texte en orange, si "en cours de livraison" -> texte vert, etc.
Par avance un grand merci

10 réponses

Skeletyon
Messages postés
1547
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
30 décembre 2013
158
16 sept. 2011 à 15:03
Bonjour,

de façon assez simple je dirai qu'une petite fonction serait appropriée.

Tu affiches tes infos dans ton tableau, tu récupère la valeur de ton champ exemple "préparation". Tu lance une fonction couleurTexte($statut)

public function couleurTexte($statut){
et là tu test avec des if: if ($statut == "preparation") $couleur = "red" ou l'hexa.
etc

}
Et dans ton tableau ou css tu mets <color = <?php echo ($couleur); ?> />

Par exemple. C'est une piste.
Sinon des case avec un switch sur le même principe. Je te conseille de mettre tes fonctions dans un ficher et de les appeler quand tu en as besoin un peu n'importe ou sur ton site.

Bien sur tu récupères ton statut avant d'afficher ton tableau :-)
1
Bonjour,
Ceci devrait fonctionner et résoudre ton problème :
<?php
$db = mysql_connect('localhost', '***', '***');
mysql_select_db('***',$db);

$sql = 'SELECT * FROM commandes ORDER BY nom';
$req = mysql_query($sql)or die('Impossible de se connecter au serveur '.$sql.' '.mysql_error());

echo '<table width="600" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="175" align="left"><strong>NOM</strong></td>
<td width="150" align="left"><strong>PRENOM</strong></td>
<td width="125" align="left"><strong>N° COMMANDE</strong></td>
<td width="150" align="left"><strong>STATUT</strong></td>
</tr>';

while($data = mysql_fetch_array($req)) { 
	echo "<tr>
	<td width=\"175\">". $data['nom'] ."</td>
	<td width=\"150\">". $data['prenom'] ."</td>
	<td width=\"125\">". $data['commande'] ."</td>
	<td width=\"150\"><span style=\"color: ";
	if($data['statut'] == 'en cours') {
		echo 'red';
	} elseif($data['statut'] == 'en préparation') {
		echo 'orange';
	} elseif($data['statut'] == 'en cours de livraison') {
		echo 'green';
	}
	echo '">'. $data['statut'].'</span></td></tr>';
}
echo '</table>';
mysql_close();
?>
1
momohuri
Messages postés
235
Date d'inscription
lundi 6 juillet 2009
Statut
Membre
Dernière intervention
9 février 2012
8
16 sept. 2011 à 15:00
tu sais faire du php? ou tu veut un truc tout fait?

grosso modo tu fait juste une query select statutdelacommande;

apres un if ($resultdelaquerry=preparation){
color=red;
}
eleseif(){

}
...
0
Skeletyon
Messages postés
1547
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
30 décembre 2013
158
16 sept. 2011 à 15:05
Cela peut aussi fonctionner mais il ne sera pas obligé de faire 2 requêtes du coup? Une pour savoir le statut, l'autre pour sélectionner le reste des infos?

Autant qu'il sélectionne tout, qu'il check le statut et de faire ensuite l'application du css spécifique tu ne crois pas?
0
Est-ce que cette méthode me permet de mettre toute la ligne en couleur ou se sera simplement la valeur "statut commande" ?
0
Skeletyon
Messages postés
1547
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
30 décembre 2013
158
19 sept. 2011 à 08:17
Tu peux mettre ce que tu veux en couleur en fait. Du moins tout ce qui est dans ta fonction, que ce soit While ou plutôt For Each.
0
Merci pour ta réponse momohuri,
j'avoue que j'aime comprendre pour être un peu moins bête mais sur ce coup c'est très en avant par rapport à mes compétences... si tu as le temps de m'en dire plus, à l'heure j'ai simplement un tableau qui affiche mes commandes les unes sous les autres et je voudrais les différencier visuellement en affichant les lignes de couleurs différentes suivant le statut de chacune.

J'ai donc simplement ce code à l'heure actuelle :

<table width="600" border="0"cellpadding="0" cellspacing="0">
<tr>
<td width="175"><div align="left"><strong>NOM</strong></div></td>
<td width="150"><div align="left"><strong>PRENOM</strong></div></td>
<td width="125"><div align="left"><strong>N° COMMANDE</strong></div></td>
<td width="150"><div align="left"><strong>STATUT</strong></div></td>
</tr>
</table>


<?PHP

$db = mysql_connect('localhost', '***', '***');
mysql_select_db('***',$db);

$sql = 'SELECT * FROM commandes ORDER BY nom';
$req = mysql_query($sql) or die('Impossible de se connecter au serveur
'.$sql.'
'.mysql_error());

while($data = mysql_fetch_array($req))
{
echo "<div>
<table width=\"600\" border=\"0\">
<tr>
<td width=\"175\">";
echo $data['nom'];
echo "</td>
<td width=\"150\">";
echo $data['prenom'];
echo "</td>
<td width=\"125\">";
echo $data['commande'];
echo "</td>
<td width=\"150\">";
echo $data['statut'];
echo "</td>
</tr>
</table>
</div>";
}
mysql_close();
?>

Merci d'avance de ton aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Skeletyon
Messages postés
1547
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
30 décembre 2013
158
16 sept. 2011 à 15:18
Je pense que le plus approprié serait de faire un for each au lieu d'un while.

Comme ça pour chaque ligne, tu contrôle le statut et tu créé une ligne avec la couleur que tu veux.

Donc tu ouvres ton tableau, tu lances ton for each, tu check le statut et tu refais exactement ce que tu as fait en mettant la balise color avec la bonne couleur, tu fermes ta ligne comme ça quand ça repars ça ouvre une ligne et ça continue...

A la fin tu fermes ton tableau.
0
Merci Skeletyon, est-ce que tu pourrais me donner une structure un peu plus détaillée, je suis en train de regarder le php manual pour la commande foreach mais j'ai peu que mes compétences limitées en php ne me fassent passer des heures à essayer de l'adapter...
0
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
956
16 sept. 2011 à 15:28
et utilise CSS...
0
Skeletyon
Messages postés
1547
Date d'inscription
jeudi 20 novembre 2008
Statut
Membre
Dernière intervention
30 décembre 2013
158
16 sept. 2011 à 15:30
Là dans l'instanté je peux pas te filer ça.

Par contre sache que c'est exactement le même principe que While.
While est pour "tant que" alors que for each est "pour chaque".

Il suffit donc en fait d'adapter un poil ton While pour que cela fonctionne. J'ai pas trop regardé mais si tu mets for each à la place de while ça devrait même fonctionner comme ça.

C'est juste la façon dont c'est traité qui est différente.

Si tu veux c'est:
On te demande de recopier 20 mots.
Soit c'est tant qu'il y en a tu les recopie, soit c'est pour chaque mot tu le recopie. Le résultat est le même mais pas la méthode ^^

Si j'ai le temps jte fais ça ce week-end, ce soir c'est beuverie et concert :p
0
Alain_42
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
898
19 sept. 2011 à 16:15
salut j'ai rectifié le codage de la table et une solution pour colrier la ligne en fct du statut

<table widtd="600" border="0"cellpadding="0" cellspacing="0">
<tr>
<th width="175"><div align="left">NOM</div></th>
<th width="150"><div align="left">PRENOM</div></th>
<th width="125"><div align="left">N° COMMANDE</div></th>
<th width="150"><div align="left">STATUT</div></th>
</tr>



<?php

$db = mysql_connect('localhost', '***', '***')or die('Impossible de se connecter au serveur');
mysql_select_db('***',$db);

$sql = 'SELECT * FROM commandes ORDER BY nom';
$req = mysql_query($sql) or die ('Pb avec la requette: '.$sql.''.mysql_error());

while($data = mysql_fetch_array($req))
{
	//on teste la valeur du statut pour déterminer la couleur
	switch ($data['statut']){
		case 'en cours':
			$couleur='red';//a remplacer par le code hexa de la couleur voulue #.......
		break;
		case 'en preparation':
			$couleur='orange';//a remplacer par le code hexa de la couleur voulue #.......
		break;
		default:
			$couleur='black';//a remplacer par le code hexa de la couleur par defaut
		break
	
	
	}
	echo "<tr style=\"color:$couleur;\">";
	echo "<td> $data['nom']</td>";
	echo "<td> $data['prenom']</td>";
	echo "<td> $data['commande']</td>";	
	echo "<td> $data['statut']</td>";
	echo "</tr>";
	
}
mysql_close();
?>
</table> 
0
Un grand merci à tous les deux _construct et Alain_42,
Vos deux codes sont parfaits et m'ont fait découvrir un peu plus le php !

_construct : ton code marche parfaitement mais seule la valeur 'statut' est mise en couleur

Alain_42 : j'ai du adapter très légèrement ton code car cela ne fonctionnait pas mais c'est exactement ce que je voulais, chaque ligne est mise en couleur en fonction de la valeur 'statut'

Voici le code tel que je l'ai modifié (pour ceux qui chercheraient la même chose) :

while($data = mysql_fetch_array($req))
{
//on teste la valeur du statut pour déterminer la couleur
switch ($data['statut']){
case 'en cours':
$couleur='red';//a remplacer par le code hexa de la couleur voulue #.......
break;
case 'en preparation':
$couleur='orange';//a remplacer par le code hexa de la couleur voulue #.......
break;
default:
$couleur='black';//a remplacer par le code hexa de la couleur par defaut
break;
}
echo "<tr style=\"color:$couleur;\">
<td width=\"175\">";
echo $data['nom'];
echo "</td>
<td width=\"150\">";
echo $data['prenom'];
echo "</td>
<td width=\"125\">";
echo $data['commande'];
echo "</td>
<td width=\"150\">";
echo $data['statut'];
echo "</td>
</tr>";

}
mysql_close();
?>

Merci encore à vous deux pour le temps que vous m'avez accordé et longue vie à CommentCaMarche !!
0