couleur tableau fct result valeur colonne csv

couleur tableau fct result valeur colonne csv - PHP - Programmation

Marsh Posté le 24-01-2013 à 17:40:50    

Bonjour,
 
Débutant avec PHP, j'aurais besoin de votre aide.
 
Existant :
- 1 fichier csv composé comme suit:
 
entete1;entete2;entete3;entete4;
valeur1;valeur11;valeur111;valeur1111;
valeur2;valeur22;valeur222;valeur2222;
valeur3;valeur33;valeur333;valeur3333;
valeur ......
 
J'affiche le tableau extrait du csv dans une page PHP avec balise de mise en forme (tableau html)
 
Par contre, je souhaiterais afficher toutes les valeurs "entete4" avec de la couleur.
si valeur1111 = "0" dans le csv then cellule du tableau dans page PHP = "green"
si valeur1111 = "1" dans le csv then cellule du tableau dans page PHP = "red"
 
si valeur2222 = "0" dans le csv then cellule du tableau dans page PHP = "green"
si valeur2222 = "1" dans le csv then cellule du tableau dans page PHP = "red"
 
 
Pourriez-vous m'aider ?
 
merci d'avance.
 
Voici mon code :
 
<?php
$vCSVdelimiter = ';'; $vCSVenclosure = '"'; $vCSVescape = '\\'; // paramètres CSV
$CheminDuCsv = '../csv/20130123-Sites.csv';  
 
if ( !( ($vFichier = file_get_contents( $CheminDuCsv )) === FALSE ) ) {
$vFichier = str_replace( chr(13).chr(10) , chr(13) , $vFichier ); // remplace crlf par cr
$vFichier = str_replace( chr(10) , ' ' , $vFichier ); // remplace lf par un blanc ; (lf (0A) est utilisé par Excel pour les changements de lignes de texte à l'intérieur d'une cellule)
     $lines = explode( chr(13) , $vFichier ); // converti la chaîne qui est dans $vFichier en tableau associatif ($lines)
     if ( ! ( (strpos( $lines[0], $vCSVdelimiter)) === FALSE ) ) {
$vNbCol = substr_count( $lines[0], $vCSVdelimiter ) + 1 ; // nb colonnes de la première ligne
          $vNoLigFicDon = 0 ; // init compteur numéro de ligne du fichier de données
$tDonnesLues = array();
          foreach ($lines as $line) {
                if ( ! ( strpos( $line, $vCSVdelimiter) === FALSE ) ) {
                     $tCsvDatas = str_getcsv( $line, $vCSVdelimiter, $vCSVenclosure, $vCSVescape) ;
                     $vNoLigFicDon++;
                     for ( $vNoColFicDon=1 ;$vNoColFicDon <= $vNbCol ; $vNoColFicDon++ ) {
                          if ( isset( $tCsvDatas[$vNoColFicDon-1] ) ) {
                               $vDonnee = preg_replace("( +)",' ',trim( $tCsvDatas[$vNoColFicDon-1] ) ) ; // avec suppr des blancs devant, derrière, et redondants
                          } else {
                               $vDonnee = '';
                          }
                          $tDonnesLues[$vNoLigFicDon][$vNoColFicDon] = $vDonnee ;
                     }
                }
          }
     }
}
echo '<table width=150% BORDER="1">';
for ( $vNoLigne=1 ;$vNoLigne <= $vNoLigFicDon ; $vNoLigne++ ) {
echo '<tr>';
 for ( $vNoColFicDon=1 ;$vNoColFicDon <= $vNbCol ; $vNoColFicDon++ ) {
  echo '<td>';
      print count($vNoLigFicDon) == 0 ? "not ok\n" : '<font color="blue"><b>';  
     // print count($vDonnee) == 1 ? "ok\n" : "not ok\n";
     //if ( $vNoColFicDon == 4 )  echo '<font color="green"><b>';
     if ( $vNoLigne == 1 ) echo '<font color="blue"><b>';
   echo ''.Htmlentities( $tDonnesLues[$vNoLigne][$vNoColFicDon] ,ENT_QUOTES,'ISO-8859-15').'</td>';
   }
echo '</tr>';
  }
echo '</table>';
?>
 
 
 

Reply

Marsh Posté le 24-01-2013 à 17:40:50   

Reply

Marsh Posté le 24-01-2013 à 17:48:14    

je vous est induit en erreur (tests en cours)....désolé.
voici la bonne fin du script :
echo '<table width=150% BORDER="1">';
for ( $vNoLigne=1 ;$vNoLigne <= $vNoLigFicDon ; $vNoLigne++ ) {
echo '<tr>';
 for ( $vNoColFicDon=1 ;$vNoColFicDon <= $vNbCol ; $vNoColFicDon++ ) {
  echo '<td>';  
     if ( $vNoColFicDon == 4 )  echo '<font color="green"><b>';
     if ( $vNoLigne == 1 ) echo '<font color="blue"><b>';
   echo ''.Htmlentities( $tDonnesLues[$vNoLigne][$vNoColFicDon] ,ENT_QUOTES,'ISO-8859-15').'</td>';
   }
echo '</tr>';
  }
echo '</table>';

Reply

Marsh Posté le 25-01-2013 à 00:04:22    

personne pour m'aider un peu ? ....:-)

Reply

Marsh Posté le 25-01-2013 à 10:02:33    

1- le code est illisible, il faut au moins le mettre dans des balises [code]
2- Tu mélanges le code Php et la page html. C'est mal, il faut séparer le traitement de l'affichage.
3- Tu fais ton code dans un énorme pâté de code indigeste, il faut séparer des fonctions
4- Tu colorises le texte avec une balise dépréciée depuis pas mal d'années. Il faut séparer la mise en forme de la sémantique, et utiliser du Css.  
 
A ta place je commencerais par ça, ça m'étonnerait pas que ton problème se résolve de lui même.

Reply

Marsh Posté le 25-01-2013 à 10:15:05    

bonjour,
 
Merci pour vos encouragement .... snif !  
bon je l'admet, je ne suis pas un dieu en programmation php, je débute....
Merci pour votre indulgence.
 
je vous renvoie le code avec les balises :

Code :
  1. <?php
  2. $vCSVdelimiter = ';'; $vCSVenclosure = '"'; $vCSVescape = '\\'; // paramètres CSV
  3. $CheminDuCsv = '../csv/20130123-Sites.csv';
  4. if ( !( ($vFichier = file_get_contents( $CheminDuCsv )) === FALSE ) ) {
  5. $vFichier = str_replace( chr(13).chr(10) , chr(13) , $vFichier ); // remplace crlf par cr
  6. $vFichier = str_replace( chr(10) , ' ' , $vFichier ); // remplace lf par un blanc ; (lf (0A) est utilisé par Excel pour les changements de lignes de texte à l'intérieur d'une cellule)
  7.      $lines = explode( chr(13) , $vFichier ); // converti la chaîne qui est dans $vFichier en tableau associatif ($lines)
  8.      if ( ! ( (strpos( $lines[0], $vCSVdelimiter)) === FALSE ) ) {
  9. $vNbCol = substr_count( $lines[0], $vCSVdelimiter ) + 1 ; // nb colonnes de la première ligne
  10.           $vNoLigFicDon = 0 ; // init compteur numéro de ligne du fichier de données
  11. $tDonnesLues = array();
  12.           foreach ($lines as $line) {
  13.                 if ( ! ( strpos( $line, $vCSVdelimiter) === FALSE ) ) {
  14.                      $tCsvDatas = str_getcsv( $line, $vCSVdelimiter, $vCSVenclosure, $vCSVescape) ;
  15.                      $vNoLigFicDon++;
  16.                      for ( $vNoColFicDon=1 ;$vNoColFicDon <= $vNbCol ; $vNoColFicDon++ ) {
  17.                           if ( isset( $tCsvDatas[$vNoColFicDon-1] ) ) {
  18.                                $vDonnee = preg_replace("( +)",' ',trim( $tCsvDatas[$vNoColFicDon-1] ) ) ; // avec suppr des blancs devant, derrière, et redondants
  19.                           } else {
  20.                                $vDonnee = '';
  21.                           }
  22.                           $tDonnesLues[$vNoLigFicDon][$vNoColFicDon] = $vDonnee ;
  23.                      }
  24.                 }
  25.           }
  26.      }
  27. }
  28. echo '<table width=150% BORDER="1">';
  29. for ( $vNoLigne=1 ;$vNoLigne <= $vNoLigFicDon ; $vNoLigne++ ) {
  30. echo '<tr>';
  31. for ( $vNoColFicDon=1 ;$vNoColFicDon <= $vNbCol ; $vNoColFicDon++ ) {
  32.  echo '<td>';
  33.     if ( $vNoColFicDon == 4 )  echo '<font color="green"><b>';
  34.     if ( $vNoLigne == 1 ) echo '<font color="blue"><b>';
  35.   echo ''.Htmlentities( $tDonnesLues[$vNoLigne][$vNoColFicDon] ,ENT_QUOTES,'ISO-8859-15').'</td>';
  36.   }
  37. echo '</tr>';
  38.  }
  39. echo '</table>';
  40. ?>


 
Peut-être est-ce mieux...
 
Par contre je suis preneur d'un code plus à jour, si vous avez deux minutes...
Encore une fois, désolé si je ne suis pas un "pro" comme vous ... mais j'espère à le devenir... c'est super motivant...
Merci pour votre aide.

Reply

Marsh Posté le 25-01-2013 à 10:29:17    

Dsl si j'ai semblé te prendre de haut, je ne connaissais pas ton niveau.
D'après ce que je comprends, il faut remplacer

 
Code :
  1. if ( $vNoColFicDon == 4 )  echo '<font color="green"><b>';
  2.     if ( $vNoLigne == 1 ) echo '<font color="blue"><b>';
  3. echo ''.Htmlentities( $tDonnesLues[$vNoLigne][$vNoColFicDon] ,ENT_QUOTES,'ISO-8859-15').'</td>';
 

par

 


Code :
  1. $valeur = Htmlentities( $tDonnesLues[$vNoLigne][$vNoColFicDon] ,ENT_QUOTES,'ISO-8859-15'); //Valeur à afficher
  2. $color = "black"; //Couleur noire par defaut
  3. if ( $vNoColFicDon == 4 )  //On est dans la quatrième colonne
  4. {
  5.   $color = "red";
  6.   // La couleur sera rouge par defaut dans la colonne 4, sauf si la valeur est "0"
  7.   if ($value == "0" )
  8.   {
  9.     $color = "green";
  10.   }
  11. }
  12. //Arrive ici on sait quelle couleur utiliser
  13. echo '<span style="color:'.$color.'; font-weight:bold">'.$valeur."</span>";
  14. echo "</td>";
 

J'ai pas testé donc il y a sans doute quelques erreurs de syntaxe à corriger, mais ça doit pas être loin.


Message édité par gelatine_velue le 25-01-2013 à 10:30:39
Reply

Marsh Posté le 25-01-2013 à 10:48:21    

Merci Gelatine_velue,
Bon, maintenant que mon niveau est découvert ...  :sol:  :sol:  :sol:  
Sinon, pas de soucis, je peux comprendre... pas facile avec ces débutants qui s'improvise "super bon" !  
 
Voilà j'ai copier le code pour voir ce que cela donne, mais il me retourne :
"Notice: Undefined variable: value "
 
J'ai remplacer les guillemets par des ' ' mais toujours pareil...

Reply

Marsh Posté le 25-01-2013 à 10:52:03    

il fallait "simpelment" mettre $valeur ....
 
Super pour votre aide....
 
Je vais voir si je peux maintenant ajouter une image de style "Alerte" derrière ma derniere colonne ou simplement remplacer le 0 ou le 1 par cette image...
 
Un grand merci .... vous avez trouvé en 2 minutes ce que j'ai chercher en plus de 8h00 sans trouver... Merci merci merci !

Reply

Marsh Posté le 25-01-2013 à 11:04:55    

De rien, avec plaisir.

Reply

Marsh Posté le 25-01-2013 à 14:14:37    

bonne journée :-)

Reply

Marsh Posté le 25-01-2013 à 14:14:37   

Reply

Marsh Posté le 25-01-2013 à 14:38:30    

Bonjour,

Code :
  1. vous avez trouvé en 2 minutes ce que j'ai chercher en plus de 8h00 sans trouver... Merci merci merci !


Et bien comme quoi, le forum est incontournable


---------------
Besoin d'aide pour votre projet? agence web
Reply

Marsh Posté le 25-01-2013 à 15:10:08    

Oui c'est obligé quant on est mauvais comme moi ;-)
 
Et je crois que je vais pas tarder à reposter ...  
 
pb pour afficher des champs supplémentaires à côté avec des images "red.jpg" et green.jpg"... correspondant aux colonne justement traiter avec vous auparavent !
 
pffff ....ah le code ... un vrai métier  ! et surtout respect aux personnes qui maitrisent !

Reply

Marsh Posté le 25-01-2013 à 18:53:12    

Je partage, si cela peut servir à qq ... :-)
 

Code :
  1. <?php
  2. $vCSVdelimiter = ';'; $vCSVenclosure = '"'; $vCSVescape = '\\'; // paramètres CSV
  3. $CheminDuCsv = '../csv/nom_fichier.csv';
  4. $imagecolor1 = 'green.jpg';
  5. if ( !( ($vFichier = file_get_contents( $CheminDuCsv )) === FALSE ) ) {
  6. $vFichier = str_replace( chr(13).chr(10) , chr(13) , $vFichier ); // remplace crlf par cr
  7. $vFichier = str_replace( chr(10) , ' ' , $vFichier ); // remplace lf par un blanc ; (lf (0A) est utilisé par Excel pour les changements de lignes de texte à l'intérieur d'une cellule)
  8.      $lines = explode( chr(13) , $vFichier ); // converti la chaîne qui est dans $vFichier en tableau associatif ($lines)
  9.      if ( ! ( (strpos( $lines[0], $vCSVdelimiter)) === FALSE ) ) {
  10. $vNbCol = substr_count( $lines[0], $vCSVdelimiter ) + 1 ; // nb colonnes de la première ligne
  11.           $vNoLigFicDon = 0 ; // init compteur numéro de ligne du fichier de données
  12. $tDonnesLues = array();
  13.           foreach ($lines as $line) {
  14.                 if ( ! ( strpos( $line, $vCSVdelimiter) === FALSE ) ) {
  15.                      $tCsvDatas = str_getcsv( $line, $vCSVdelimiter, $vCSVenclosure, $vCSVescape) ;
  16.                      $vNoLigFicDon++;
  17.                      for ( $vNoColFicDon=1 ;$vNoColFicDon <= $vNbCol ; $vNoColFicDon++ ) {
  18.                           if ( isset( $tCsvDatas[$vNoColFicDon-1] ) ) {
  19.                                $vDonnee = preg_replace("( +)",' ',trim( $tCsvDatas[$vNoColFicDon-1] ) ) ; // avec suppr des blancs devant, derrière, et redondants
  20.                           } else {
  21.                                $vDonnee = '';
  22.                           }
  23.                           $tDonnesLues[$vNoLigFicDon][$vNoColFicDon] = $vDonnee ;
  24.                      }
  25.                 }
  26.           }
  27.      }
  28. }
  29. echo '<table width=150% BORDER="1">';
  30. for ( $vNoLigne=1 ;$vNoLigne <= $vNoLigFicDon ; $vNoLigne++ ) {
  31. echo '<tr>';
  32. for ( $vNoColFicDon=1 ;$vNoColFicDon <= $vNbCol ; $vNoColFicDon++ ) {
  33.  echo '<td>';
  34. $valeur = Htmlentities( $tDonnesLues[$vNoLigne][$vNoColFicDon] ,ENT_QUOTES,'ISO-8859-15'); //Valeur à afficher
  35. $color = "grey"; //Couleur grise par defaut
  36. if ( $vNoColFicDon == 4 )  //On est dans la quatrième colonne
  37.   {
  38.    $color = '#e9fbbf'; // La couleur sera celle du fond du tableau par defaut dans la colonne 4, sauf si la valeur est "0"
  39.     if ($valeur == 0 & $valeur <> 'ETAT')  {
  40.            $color = '#e9fbbf'; //permet de cacher la valeur retournée
  41.        echo '<img src="../images/Button_Red.png" '.$valeur.' </img>' ; //affiche une image à la place
  42.      }
  43.     if ($valeur == 1 & $valeur <> 'ETAT')  {
  44.         $color = '#e9fbbf'; //permet de cacher la valeur retournée
  45.     echo '<img src= "../images/GREEN_Button.png" '.$valeur.'</img>' ;} //affiche une image à la place
  46. }
  47. //Arrivé ici on sait quelle couleur utiliser
  48. echo '<span style="color:'.$color.'; font-weight:bold">'.$valeur. "</span>";
  49. echo "</td>";
  50. }
  51. }   
  52. echo '</tr>';
  53. echo '</table>';
  54. ?>


 
Cordialement
ps: je ne sais pas si je peux, mais si vous avez 2 minutes, voici mon site photos.
(permet de se changer les idées, puis petit site non commercial !)
http://www.fx-photos.com

Reply

Sujets relatifs:

Leave a Replay

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