Code PHP, je coince...

Résolu/Fermé
hugalito - 26 nov. 2009 à 11:08
 hugalito - 26 nov. 2009 à 15:54
Bonjour,
Je suis en train de créer, avec php, un tableau de disponibilité (présent/absent) pour mon équipe de volley, modifiable en ligne.
Pour cela, j'ai d'abord créé une table sur ma DB, avec 19 champs : "nom" (nom des joueurs), m1 (dispo pour match 1), m2, m3, ..., m18.
m1, m2, ..., m18 ne pourront prendre que 3 valeurs : NULL (vide), "OK" ou "NON" (données récupérées par formulaire). Ensuite, j'affiche ces résultats dans un tableau tout bête.
Mon code fonctionne très bien et j'en suis content. Je rajoute que c'est mon premier, d'où ma satisfaction...
Mais comme on peut toujours améliorer les choses (et les codes qui vont avec...) je souhaiterai, quand j'affiche mon tableau sur ma page html, que "OK" soit écrit en vert, et "NON" en rouge.
Et là, je coince !!

Voici mon bout de code qui correspond à l'affichage des données de ma table (appelée presence) dans mon tableau html :

...

<?php

mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("hugo"); // Sélection de la base coursphp

$reponse = mysql_query("SELECT * FROM presence"); // Requête SQL


// On fait une boucle pour lister tout ce que contient la table :

while ($donnees = mysql_fetch_array($reponse) )
{
?>

<tr>
<td class="couleur1"> <?php echo $donnees['nom'] ; ?> </td>
<td class="couleur2"> <?php echo $donnees['m1'] ; ?> </td>
<td class="couleur3"> <?php echo $donnees['m2'] ; ?> </td>
<td class="couleur2"> <?php echo $donnees['m3'] ; ?> </td>
<td class="couleur3"> <?php echo $donnees['m4'] ; ?> </td>
<td class="couleur2"> <?php echo $donnees['m5'] ; ?> </td>
<td class="couleur3"> <?php echo $donnees['m6'] ; ?> </td>
<td class="couleur2"> <?php echo $donnees['m7'] ; ?> </td>
<td class="couleur3"> <?php echo $donnees['m8'] ; ?> </td>
<td class="couleur2"> <?php echo $donnees['m9'] ; ?> </td>
<td class="couleur3"> <?php echo $donnees['m10'] ; ?> </td>
<td class="couleur2"> <?php echo $donnees['m11'] ; ?> </td>
<td class="couleur3"> <?php echo $donnees['m12'] ; ?> </td>
<td class="couleur2"> <?php echo $donnees['m13'] ; ?> </td>
<td class="couleur3"> <?php echo $donnees['m14'] ; ?> </td>
<td class="couleur2"> <?php echo $donnees['m15'] ; ?> </td>
<td class="couleur3"> <?php echo $donnees['m16'] ; ?> </td>
<td class="couleur2"> <?php echo $donnees['m17'] ; ?> </td>
<td class="couleur3"> <?php echo $donnees['m18'] ; ?> </td>
</tr>



<?php
}
// mysql_close();
?>



</table>


Auriez-vous une petite idée pour faire tout çà ?

Merci d'avance.
A voir également:

9 réponses

Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
26 nov. 2009 à 11:17
Bonjour,

Dans chacun de tes TD tu peux rajouter la balise font comme suit

<td class="couleur2"><font style="color:<?php echo ($donnees['m1'] == 'OK' ? #00FF00 : #FF0000); ?>"<?php echo $donnees['m1'] ; ?> </font></td> 
0
Merci pour ta réponse rapide.
Malheureusement, je dois quitter mon ordi pour le moment.
J'essaierai tout çà plus tard...
A tout'
0
Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
26 nov. 2009 à 11:38
<?php
echo '<table border="1">';
echo '<tr><td class="couleur1">' . $donnees['nom'] . '</td>';
for ($count = 1;$count < 19;$count++)
{
	$key = 'm'.$count;
	echo '<td class="couleur'.($count % 2 == 0 ? '2' : '3').'"> <font style="color:' . ($donnees[$key] == 'OK' ? '#00FF00' : '#FF0000') . '">' . $donnees[$key].'</font></td>';
}
echo '</tr></table>'
?>

Tiens, ça devrait résumer ton tableau
0
Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
26 nov. 2009 à 11:52
Je t'ai même fais un petit goodies : Compte le nombre de OK par match et l'affiche en bas de chaque colonne :

EDIT : Et j'ai rajouté ta boucle while pour que tu comprenne comment le placer dans ton code.
RE-EDIT : Encore un goodies, a la fin de chaque ligne correspondant a un joeur : le total de match auquel ce joueur a dit OK ^^

<?php
$total = array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
$ok = 0;

echo '<table border="1">';
while ($donnees = mysql_fetch_array($reponse) ) 
{
echo '<tr><td class="couleur1">' . $donnees['nom'] . '</td>';
for ($count = 1;$count < 19;$count++)
{
	$key = 'm'.$count;
	echo '<td class="couleur'.($count % 2 == 0 ? '2' : '3').'"> <font style="color:' . ($donnees[$key] == 'OK' ? '#00FF00' : '#FF0000') . '">' . $donnees[$key].'</font></td>';
        $ok = ($donnees[$key] == 'OK' ? $ok + 1 : $ok); 
	$total[$count] = ($donnees[$key] == 'OK' ? $total[$count] + 1 : $total[$count]); 
}
echo '<td>'.$ok.'</td>';
$ok = 0;
echo '</tr>';
}
echo '<tr><td>Total</td>';
for ($count = 1;$count < 19;$count++)
	echo '<td class="couleur'.($count % 2 == 0 ? '2' : '3').'">' . $total[$count].'</td>';
echo '</tr></table>'
?>


Normalement ya plus qu'à Copy/paste ^^
0

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

Posez votre question
Eh ben...
Mon petit tableau t'a inspiré !!!!
Je te remercie beaucoup pour ton travail ! Je n'en demandais pas tant mais j'apprécie vraiment.
Il me reste maintenant à en comprendre la teneur...

Je viens juste de revenir sur mon ordi et je vais m'attaquer dès à présent à déchiffrer tout çà.
Parce que le copy/paste (que je ne manquerai pas de faire !), c'est bien. Mais comprendre ce qu'on "copy/paste", c'est encore mieux !!

Encore merci.

hugalito
0
Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
26 nov. 2009 à 14:26
Si jamais tu as une question sur ce que j'ai fais n'hésite pas, je suis disposé à expliquer tout ce que j'ai fais ^^
0
Et bien j'ai tout compris sauf...

- le rôle de la balise <font> : à quoi sert-elle finalement ? Est-il possible d'écrire la partie du code comme ceci :

echo '<td class="couleur'.($count % 2 == 0 ? '2' : '3').'" , style="color:' . ($donnees[$key] == 'OK' ? '#00FF00' : '#FF0000') . '">' . $donnees[$key].'</td>';
Si non, pourquoi ?

- cette condition :

($count % 2 == 0 ? '2' : '3')

et notamment le rôle du % ...

Autrement, c'est super cool !
C'est d'autant plus cool que j'ai compris !!!!

Merci
0
Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
26 nov. 2009 à 15:43
Ah oui autant pour moi

Cette écriture est possible :

echo '<td class="couleur'.($count % 2 == 0 ? '2' : '3').'" style="color:' . ($donnees[$key] == 'OK' ? '#00FF00' : '#FF0000') . '">' . $donnees[$key].'</td>';

D'apres mes connaissances : ici tu modifie le style de la case, donc la couleur d'écriture dans la case alors que la balise FONT modifie le style du texte entre les balises <font> et </font> donc du "texte dans la case".


Pour la condition ($count % 2 == 0 ? '2' : '3') c'est en clair le 'Une fois sur deux'

Count augmente a chaque boucle ... 1 ... 2 ... 3 ... 4
Le % est le modulo, en clair : Le reste de la division de count par 2
donc le modulo sera : 0 ... 1 ... 0 ... 1 ... 0
donc une fois sur deux la class sera couleur2 et une fois sur deux couleur3
0
Maintenant c'est complètement clair.

Vive la concaténation et le modulo !

Encore merci pour le temps que tu as pu consacré à répondre à mes questions.

Bonne fin de journée.

Hugalito
0