Alterner couleur de lignes d'un tableau

Alterner couleur de lignes d'un tableau - PHP - Programmation

Marsh Posté le 16-01-2009 à 15:05:30    

Bonjour.
 
Je tente d'insérer ce code pour alterner les couleurs de lignes de mon tableau

Code :
  1. <?php
  2.     function color(){
  3.         static $count = 0;
  4.         $num_args = func_num_args();
  5.         if ($num_args === 0) return;
  6.         $args = func_get_args();
  7.         $color = $args[$count % $num_args];
  8.         ++$count;
  9.         return $color;
  10.     }
  11. ?>
  12. <?php
  13.     $i = 0;
  14.     while(++$i < 10){
  15.         echo '<span style="color: ' . color('blue','red','green') . '>' . $i . '</span><br />';
  16.     }
  17. ?>


 
 
donc je fait
 
 

Code :
  1. <? function color(){
  2.         static $count = 0;
  3.         $num_args = func_num_args();
  4.         if ($num_args === 0) return;
  5.         $args = func_get_args();
  6.         $color = $args[$count % $num_args];
  7.         ++$count;
  8.         return $color;
  9.  }
  10.   // on compte le nombre de news stockées dans la base de données
  11. $nb_news = mysql_num_rows($req);
  12. if ($nb_news == 0) {
  13.     echo 'Aucune news enregistrée.';
  14. }
  15. else {
  16.    // si on a au moins une news, on l'affiche
  17.    $nb_news = 0;
  18.     while ($data = mysql_fetch_array($req)) {
  19.   $i = 0;
  20.     while(++$i < 10){
  21.      
  22.                             
  23.         // on affiche les résultats
  24.       echo '<p id="'.$data['id'].'">';
  25. echo '<span style="color: ' . color('blue','red','green') . '> <h3><a href="index-'.$data['id'].'.php">' .stripslashes(trim($data['titre'])).  '</a></h3>';  ?>
  26.    
  27.        echo '' , nl2br(trim($data['texte_news'])) ; ?>
  28.       <a href="index-<?php echo $id;?>.php">Lire la suite <img src="bouton_fleche.gif" border="0" align="absmiddle" /></a></span>
  29. }
  30. }


 
Mais ca ne fonctionne pas :(


Message édité par jc66 le 16-01-2009 à 15:05:45
Reply

Marsh Posté le 16-01-2009 à 15:05:30   

Reply

Marsh Posté le 16-01-2009 à 15:09:45    

il vaut mieux que tu créés deux classes CSS pour les tr, avec 2 couleurs distinctes
 
et apres, dans ton while, tu fais ça:

Code :
  1. while ( ++$i < 10)
  2. {
  3. $classeTR = (( $i%2 == 0 ) ?  "rouge" : "bleue" );
  4. echo "<tr class=\"".$classeTR."\">";
  5.  
  6. ...............
  7.  
  8. echo "</tr>";
  9. }


---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 16-01-2009 à 15:10:12    

Qu'est-ce qui ne fonctionne pas. As-tu vérifié le code généré ?

Reply

Marsh Posté le 16-01-2009 à 15:38:47    

Ce qui me pose problème c'est que moi j'ai  
 

Code :
  1. while ($data = mysql_fetch_array($req))


 
 
il faut que je le remplace par  

Code :
  1. while ( ++$i < 10)


 
 
?? (suivant le code de Marty_McFly)
 
Je ne comprend pas


---------------
http://www.mouly-jean-claude.fr
Reply

Marsh Posté le 16-01-2009 à 15:41:53    

Nan, tu mets ton $i++ quelque part dans le while. La condition inférieure à 10, ça devait être pour l'exemple juste.
 
Essaye d'abord de comprendre ce que tu fais et lis, ça ne sert à rien de recopier bêtement un code

Reply

Marsh Posté le 16-01-2009 à 15:50:20    

FlorentG a écrit :

Qu'est-ce qui ne fonctionne pas. As-tu vérifié le code généré ?


+1
A vue de nez :
 
1. Le code HTML est un vrai sac de noeuds :
- Tu met un titre h3 dans un Paragraphe.Ca ne se fait pas.
- tu utilises un span qui fait tout le paragraphe. C'est inutile, autant définir les caractèristiques de ton paragraphe...
 
2.  

Code :
  1. echo '<span style="color: ' . color('blue','red','green') . '> <h3><a href="index-'.$data['id'].'.php">' .stripslashes(trim($data['titre'])).  '</a></h3>';

Il manque une apostrophe pour fermer le style du span...

Reply

Marsh Posté le 16-01-2009 à 16:02:36    

J'ai repris mon code en le commentant, voici mon code vierge (pas de code pour alterner les couleurs:
 
j'ai ca:  

Code :
  1. <?php
  2. // je me connecte  ma base  
  3. $base = mysql_connect ('***', '***', '***');
  4.     mysql_select_db('***', $base);
  5. //je lance ma requete
  6. $sql = 'SELECT * FROM news1
  7. ORDER BY date1 desc ' ;
  8. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  9. // je compte le nombre de news stockées dans ma bdd
  10. $nb_news = mysql_num_rows($req);
  11. if ($nb_news == 0) {
  12.     echo 'Aucune news enregistrée.';
  13. }
  14. else {
  15.    // si j'ai un titre je  l'affiche
  16.    $nb_news = 0;
  17.     while ($data = mysql_fetch_array($req)) {
  18. // j'affiche mon titre
  19.        echo '' , nl2br(trim($data['titre'])) ; ?><br>
  20.  
  21.    <?
  22.          }
  23. }
  24. // je fini la requete
  25. mysql_free_result ($req);
  26. ?>


 
 
voici mon code avec la fonction que j'avais mise en premier post (voir tout en haut), je l'inclu dans mon code php pour avoir les couleurs des lignes alternées:
 

Code :
  1. <?php
  2. // je me connecte  ma base  
  3. $base = mysql_connect ('***', '***', '***');
  4.     mysql_select_db('***', $base);
  5. //je lance ma requete
  6. $sql = 'SELECT * FROM news1
  7. ORDER BY date1 desc ' ;
  8. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  9. // je compte le nombre de news stockées dans ma bdd
  10. $nb_news = mysql_num_rows($req);
  11. if ($nb_news == 0) {
  12.     echo 'Aucune news enregistrée.';
  13. }
  14. else {
  15.    // si j'ai un titre je  l'affiche
  16.    $nb_news = 0;
  17.    // le dièse i=0 pour les lignes alternées
  18.      $i = 0;
  19.     while ($data = mysql_fetch_array($req)) {
  20. //le dièse i++ pour les lignes alternées
  21. ++$i
  22. //la fonction
  23.     function color(){
  24.         static $count = 0;
  25.         $num_args = func_num_args();
  26.         if ($num_args === 0) return;
  27.         $args = func_get_args();
  28.         $color = $args[$count % $num_args];
  29.         ++$count;
  30.         return $color;
  31.     }
  32. // j'affiche mon titre
  33.        echo '<span style="color: ' . color('blue','red','green') . '>' , nl2br(trim($data['titre'])), '</span>' ; ?><br>
  34.  
  35.    <?
  36.          }
  37. }
  38. // je fini la requete
  39. mysql_free_result ($req);
  40. ?>


 
 
et j'ai cette erreur:  Parse error: syntax error, unexpected T_FUNCTION in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/bis3/news/test.php on line 30
 
 
 


---------------
http://www.mouly-jean-claude.fr
Reply

Marsh Posté le 16-01-2009 à 16:04:03    

Nan mais on ne déclare pas de fonction dans un while [:petrus75]

Reply

Marsh Posté le 16-01-2009 à 16:06:43    

FlorentG a écrit :

Nan mais on ne déclare pas de fonction dans un while [:petrus75]


 
j'ai essayé en la mettant tout en haut de la page, mais c'est pareil


---------------
http://www.mouly-jean-claude.fr
Reply

Marsh Posté le 16-01-2009 à 16:07:57    

Ca ne dois pas être pareil nan. Sérieusement, essaie de faire ça toi-même au lieu de repomper un code ailleurs. Surtout que là on dirait que tu ne connais pas encore la notion de fonction...

Reply

Marsh Posté le 16-01-2009 à 16:07:57   

Reply

Marsh Posté le 16-01-2009 à 16:08:54    

le code commenté , c'est mon propre code, y a pas de pompage nulle part :)


Message édité par jc66 le 16-01-2009 à 16:09:16

---------------
http://www.mouly-jean-claude.fr
Reply

Marsh Posté le 16-01-2009 à 16:10:44    

Ouais mais la fonction, c'est toi qui l'a faite ?

Reply

Marsh Posté le 16-01-2009 à 16:11:03    

donc je fait ca:
 

Code :
  1. <?php
  2. // je me connecte  ma base  
  3. $base = mysql_connect ('***', '***', '***');
  4.     mysql_select_db('***', $base);
  5. //je lance ma requete
  6. $sql = 'SELECT * FROM news1
  7. ORDER BY date1 desc ' ;
  8. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  9. // je compte le nombre de news stockées dans ma bdd
  10. $nb_news = mysql_num_rows($req);
  11. //la fonction
  12.     function color(){
  13.         static $count = 0;
  14.         $num_args = func_num_args();
  15.         if ($num_args === 0) return;
  16.         $args = func_get_args();
  17.         $color = $args[$count % $num_args];
  18.         ++$count;
  19.         return $color;
  20.     }
  21. if ($nb_news == 0) {
  22.     echo 'Aucune news enregistrée.';
  23. }
  24. else {
  25.    // si j'ai un titre je  l'affiche
  26.    $nb_news = 0;
  27.    // le dièse i=0 pour les lignes alternées
  28.      $i = 0;
  29.     while ($data = mysql_fetch_array($req)) {
  30. //le dièse i++ pour les lignes alternées
  31. ++$i
  32. // j'affiche mon titre
  33.            echo '<span style="color: ' . color('blue','red','green') . '>' , nl2br(trim($data['titre'])), '</span>' ; ?><br>
  34.  
  35.    <?
  36.          }
  37. }
  38. // je fini la requete
  39. mysql_free_result ($req);
  40. ?>


 
 
 
Parse error: syntax error, unexpected T_ECHO in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/bis3/news/test.php on line 45


Message édité par jc66 le 16-01-2009 à 16:12:57

---------------
http://www.mouly-jean-claude.fr
Reply

Marsh Posté le 16-01-2009 à 16:12:34    

T'as oublié un point-virgule après ton ++$i. L'erreur n'est pas la même, regarde là-ligne indiquée, regarde aussi le type d'erreur (unexpected, ça veut dire qu'il s'attend à autre chose)

Reply

Marsh Posté le 16-01-2009 à 16:14:51    

là j'ai plus d'erreur avec ce code, mais aucune ligne de couleur
 

Code :
  1. <?php
  2. // je me connecte  ma base  
  3. $base = mysql_connect ('***', '***', '***');
  4.     mysql_select_db('***', $base);
  5. //je lance ma requete
  6. $sql = 'SELECT * FROM news1
  7. ORDER BY date1 desc ' ;
  8. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  9. // je compte le nombre de news stockées dans ma bdd
  10. $nb_news = mysql_num_rows($req);
  11. //la fonction
  12.     function color(){
  13.         static $count = 0;
  14.         $num_args = func_num_args();
  15.         if ($num_args === 0) return;
  16.         $args = func_get_args();
  17.         $color = $args[$count % $num_args];
  18.         ++$count;
  19.         return $color;
  20.     }
  21. if ($nb_news == 0) {
  22.     echo 'Aucune news enregistrée.';
  23. }
  24. else {
  25.    // si j'ai un titre je  l'affiche
  26.    $nb_news = 0;
  27.    // le dièse i=0 pour les lignes alternées
  28.      $i = 0;
  29.     while ($data = mysql_fetch_array($req)) {
  30. //le dièse i++ pour les lignes alternées
  31. ++$i;
  32. // j'affiche mon titre
  33.           echo '<span style="color: ' . color('blue','red','green') . '>' , nl2br(trim($data['titre'])), '</span>' ; ?><br>
  34.  
  35.    <?
  36.          }
  37. }
  38. // je fini la requete
  39. mysql_free_result ($req);
  40. ?>


 


---------------
http://www.mouly-jean-claude.fr
Reply

Marsh Posté le 16-01-2009 à 16:15:42    

Nan mais il faut que tu regardes le code HTML généré, tu devrais voir alors ce qui cloche.

Reply

Marsh Posté le 16-01-2009 à 16:19:47    

je ne sait pas ce qui cloche, j'ai bien les span dans la page:
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Untitled Document</title>
  6. </head>
  7. <body>
  8. <span style="color: blue>titre1</span><br>
  9.  
  10.    <span style="color: red>titre2</span><br>
  11.  
  12.    <span style="color: green>titre3</span><br>
  13.  
  14.    <span style="color: blue>titre4</span><br>
  15.  
  16. </body>
  17. </html>


---------------
http://www.mouly-jean-claude.fr
Reply

Marsh Posté le 16-01-2009 à 16:20:57    

Regarde bien, il y a quelque chose qui manque

Reply

Marsh Posté le 16-01-2009 à 16:23:28    

macgawel a écrit :


+1
A vue de nez :
 
1. Le code HTML est un vrai sac de noeuds :
- Tu met un titre h3 dans un Paragraphe.Ca ne se fait pas.
- tu utilises un span qui fait tout le paragraphe. C'est inutile, autant définir les caractèristiques de ton paragraphe...
 
2.  

Code :
  1. echo '<span style="color: ' . color('blue','red','green') . '> <h3><a href="index-'.$data['id'].'.php">' .stripslashes(trim($data['titre'])).  '</a></h3>';

Il manque une apostrophe pour fermer le style du span...


 :whistle:

Reply

Marsh Posté le 16-01-2009 à 16:24:13    

;"
 
je suis pas sur que le <br> soit de l'xhtml 1.0 valid (mais chaque chose en son temps)


Message édité par Marty_McFly le 16-01-2009 à 16:24:54

---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 16-01-2009 à 16:26:14    


 
 
je ne voit pas ou ?????
 
 

Code :
  1. <?php
  2. // je me connecte  ma base  
  3. $base = mysql_connect ('***', '***', '***');
  4.     mysql_select_db('***', $base);
  5. //je lance ma requete
  6. $sql = 'SELECT * FROM news1
  7. ORDER BY date1 desc ' ;
  8. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  9. // je compte le nombre de news stockées dans ma bdd
  10. $nb_news = mysql_num_rows($req);
  11. //la fonction
  12.     function color(){
  13.         static $count = 0;
  14.         $num_args = func_num_args();
  15.         if ($num_args === 0) return;
  16.         $args = func_get_args();
  17.         $color = $args[$count % $num_args];
  18.         ++$count;
  19.         return $color;
  20.     }
  21. if ($nb_news == 0) {
  22.     echo 'Aucune news enregistrée.';
  23. }
  24. else {
  25.    // si j'ai un titre je  l'affiche
  26.    $nb_news = 0;
  27.    // le dièse i=0 pour les lignes alternées
  28.      $i = 0;
  29.     while ($data = mysql_fetch_array($req)) {
  30. //le dièse i++ pour les lignes alternées
  31. ++$i;
  32. // j'affiche mon titre
  33.           echo '<span style="color: ' . color('blue','red','green') . '>' , nl2br(trim($data['titre'])), '</span>' ; ?><br>
  34.  
  35.    <?
  36.          }
  37. }
  38. // je fini la requete
  39. mysql_free_result ($req);
  40. ?>


---------------
http://www.mouly-jean-claude.fr
Reply

Marsh Posté le 16-01-2009 à 16:26:43    

Un petit effort voyons :/

Reply

Marsh Posté le 16-01-2009 à 16:29:11    

indice: c'est pas loin de la ligne 45, environ


---------------
arg(z) = pi /2 donc z = i, moi je prends pas
Reply

Marsh Posté le 16-01-2009 à 16:30:20    

" ?
 
c bon, ca marche.   Merci à tous.  ;)


---------------
http://www.mouly-jean-claude.fr
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed