Lignes de couleur dans tableau PHP

Résolu/Fermé
Signaler
Messages postés
2
Date d'inscription
jeudi 9 août 2007
Statut
Membre
Dernière intervention
10 août 2007
-
 radiati -
Bonjour à tous,

Voici la difficulté à laquelle je me heurte : j'ai un tableau en PHP qui affiche des données extraites d'une base Access. Le voici (en simplifié) :

1 | 336
2 | 336
3 | 334
4 | 333
5 | 333
6 | 333
7 | 332

L'idée est la suivante : je souhaite avoir de la même couleur les lignes qui contiennent la même valeur.
Ex ici : les deux lignes 336 en jaune, puis la 334 en bleu, puis à nouveau les trois lignes 333 en jaune, puis la 332 en bleu, etc... Ceci afin d'améliorer la lisibilité du tableau en regroupant les éléments qui vont ensemble. Le tableau sera toujours trié pour que les éléments qui se ressemblent soient regroupés. Cela simplifie je pense le travail.

Voici mon code :

...
$requete = "SELECT NumeroCommande FROM [t DetailCommandes]";
$req= odbc_exec( $cnx, $requete );$i=1;
?>
<BR><BR><table border=1>
<? while ($val = odbc_fetch_array($req)) { ?>
<tr <? if (($i % 2) == 0) echo "bgcolor=\"#FFFFFF\""; else echo "bgcolor=\"#99CCCC\"";?>>
<td><? echo $i; ?></td>
<td><? echo $val["NumeroCommande"]; ?></td>
</tr>
<? $i++; } ?></table>

Ce code là ne me permet de n'obtenir qu'une ligne sur 2 de couleur différente.

Alors que je souhaite vérifier si le numéro de commande de la ligne en cours est le même que celui de la ligne précédente. Si oui, je garde la même couleur que la ligne précédente, sinon je met une deuxième couleur. Est-ce une bonne idée ? Quelqu'un aurait-il un bout de code à me proposer ou une autre solution ?

Merci d'avance à ceux qui prendront le temps de me répondre !

Miko

5 réponses

tu mémorise la valeur de la ligne précedente et tu testes:

dans ta boucle


<?php
$old_val=""; // init pour la première ligne
$array_color=("0"=>"#FFFFFF","1"=>"#99CCCC", etc........ tu en mets assez);

while ($val = odbc_fetch_array($req)) {
if ($i=="1") $old_val=$val["NumeroCommande"]; // init pour la première ligne

if ($val["NumeroCommande"]==$old_val="") {
$color=$array_color[0];
}else{
array_shift($array_color);
$color=$array_color[0];
}
$old_val=$val["NumeroCommande"];
?>
<tr <?php echo "bgcolor=$color"; ?>>
<td><?php echo $i; ?></td>
<td><?php echo $val["NumeroCommande"]; ?></td>
</tr>
<?php $i++; } ?>
</code>

Je n'ai pas testé, ce n'est qu'une piste.

Une petite remarque:

utilises tjs les tags <?php ?> au lieu de <? ?>
0
Après une nuit de sommeil qqs erreurs dans mon precedent post:

 <?php
$old_val=""; // init pour la première ligne
$array_color=Array("0"=>"#FFFFFF","1"=>"#99CCCC", etc........ tu en mets assez);

while ($val = odbc_fetch_array($req)) {
if ($i=="1") $old_val=$val["NumeroCommande"]; // init pour la première ligne

if ($val["NumeroCommande"]==$old_val="") {
//si meme val on prend la premiere de l'array
$color=$array_color[0];
}else{
// sinon si val diff on depile une couleur du debut de l'array 
$depil=array_shift($array_color);
array_push($array_color,$depil); //et on la remet a la fin de l'array
$color=$array_color[0];// et on prend la premiere qui vient 
}
$old_val=$val["NumeroCommande"];//memo pour le tour suivant
?>
<tr <?php echo "bgcolor=$color"; ?>>
<td><?php echo $i; ?></td>
<td><?php echo $val["NumeroCommande"]; ?></td>
</tr>
<?php $i++; } ?> 
0
Oui tu as tout a fait raison le ="" était en trop, un copier /coller maleureux de ma part.

C'est très bien que tu l'ai vu et corrigé.
0
bonjpour Alain42

g un pb semblable a miko.

p.s (g laisser les variables globales sur On pour simplifier)


Voici mon code:

<html>
<body>

<?php


function generer_tableau($col,$lig)

{

$color='<td style="background-color:#8997D4">'; //couleur cellule
$color1='<td style="background-color:#66FFCC">'; // autre couleur
$col12='<td>'; // ouverture cellule
$col13='</td>'; // fermeture


$cr="\n";


// Initialise un nouveau tableau avec le code HTML requis : balise <table>

$tableau ='<table border="2" cellspacing="5" width="70%">'.$cr;



for ($l = 0; $l < $lig ; $l++) // génère lignes


{
// Initialise une nouvelle ligne avec le code HTML requis : balise <tr>



$ligne = '<tr>';

for ($c = 0; $c < $col ; $c++) //génère colonnes

// Ajoute la colonne dans la ligne avec le code HTML requis : balise <td> .... </td>

{



$x=$x+1; // affichage mes chiffres de 1 à ma dimension choisie du tableau (ici 200)





$requette = mysql_query("SELECT numplace,nomplace from EMPLACEMENT where numplace order by numplace");

while($result = mysql_fetch_array($requette))

{


$nupla = $result["numplace"];




$resultat = $color1.$x; // couleur1 avec le chiffre affiché dans la cellule
$fin = $resultat.$col13; // fermeture balises cellules

$resultat2 = $col12.$x; // couleur2
$fin2 = $resultat2.$col13; // fermeture balises cellules



$affiche1=$fin;
$affiche2=$fin2;




}



//conditions si le chiffre de mon enregistrement correspond à celui du tableau
if ($nupla==$x) {


//alors je change la couleur des cellules
$resu=$affiche1;
}else{
$resu=$affiche2; // sinon je laisse la couleur par defaut
}



$ligne .= $resu; // j'affiche le resultat


}

// Ferme la ligne avec le code HTML requis : balise </tr>



$ligne .='</tr>'.$cr;




// Ajoute la ligne au tableau
$tableau .= $ligne;

}

// Ferme le tableau avec le code HTML requis : balise </table>


$tableau.='</table>'.$cr;


return $tableau;

}

// Récuperer le code HTML du tableau dans une variable




//function generer_tableau(10,20) affichera un tableau de 10 colonnes et de 20 lignes donc 200



?>

</body>
</html>

Voilà je voudrais donc pouvoir "allumer" toutes les cellules qui correspondent à mes enregistrements sql en faisant une comparaison avec les chiffres du tableau. (x=x+1)

Merci encore pour votre aide.
0
bonjour MC
votre email tisali ne marche pas
pierre
0
Messages postés
2
Date d'inscription
jeudi 9 août 2007
Statut
Membre
Dernière intervention
10 août 2007

Un très grand merci, Alain !

Ci-dessous le code définitif qui fonctionne chez moi.

J'ai cru repérer une erreur sur la ligne que je t'indique avoir modifiée ci-dessous. A partir de cette modification, j'ai obtenu le résultat escompté.

J'ai enlevé le ="" affecté comme valeur à old_value car il me semblait que du coup old_value était null en permanence, donc jamais égal à $val["NumeroCommande"]. Mes connaissances PHP sont balbutiantes, mais cela a été ma déduction.

Le reste je n'y ai pas touché.

Si tu as des conseils, je ne manquerai pas de les mettre en oeuvre.

Merci encore pour tout !

Miko

<?php
$old_val=""; // init pour la première ligne
$array_color=Array("0"=>"#FFFFFF","1"=>"#99CCCC");
while ($val = odbc_fetch_array($req)) {
if ($i=="1") $old_val=$val["NumeroCommande"]; // init pour la première ligne
if ($val["NumeroCommande"]==$old_val) {        
//Ta proposition qui ne fonctionnait pas était : if ($val["NumeroCommande"]==$old_val="") 
//si meme val on prend la premiere de l'array
$color=$array_color[0];
}else{
// sinon si val diff on depile une couleur du debut de l'array 
$depil=array_shift($array_color);
array_push($array_color,$depil); //et on la remet a la fin de l'array
$color=$array_color[0];// et on prend la premiere qui vient 
}
$old_val=$val["NumeroCommande"];//memo pour le tour suivant
?>
-1