Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Kolorowanie warunkowe w pętli z wynikami
Forum PHP.pl > Forum > Przedszkole
f41t3r
Mam problem z kolorowaniem wyników wyświetlanych przez skrypt mysql. Chodzi mi o to ażeby wiersze zawierające konkretne wartości tj. error, warning, critical itp. były innego odpowiedniego koloru.

Tak wygląda dotychdczasowy skrypt, który musze się przyznać, że nie działa za dobrze tj. podczas warunku cały czas zwraca wartość false i wykonuje mi tylko elsa czyli podkreśla wszystkie linie na #dddddd


  1. <?php
  2.  
  3.  
  4. @ $query="select * from syslogd.syslogd where
  5. MsgDate='".mysql_escape_string($HTTP_GET_VARS['bydate'])."' AND (Msghostname 
  6.  
  7. LIKE '".mysql_escape_string($HTTP_GET_VARS['Urzadzenie'])."' AND Msgpriority 
  8.  
  9. LIKE '".mysql_escape_string($HTTP_GET_VARS['priority1'])."' OR Msgpriority 
  10.  
  11. LIKE '".mysql_escape_string($HTTP_GET_VARS['priority2'])."' oR Msgpriority 
  12.  
  13. LIKE '".mysql_escape_string($HTTP_GET_VARS['priority3'])."' OR Msgpriority 
  14.  
  15. LIKE '".mysql_escape_string($HTTP_GET_VARS['priority4'])."' OR Msgpriority 
  16.  
  17. LIKE '".mysql_escape_string($HTTP_GET_VARS['priority5'])."') ORDER BY 
  18.  
  19. '".mysql_escape_string($HTTP_GET_VARS['order'])."'";
  20. $result=mysql_query("$query");
  21.  
  22. print "<table border=0>\n";
  23. print "<tr><td><a>Date</a></td><td><a >Time</a></td><td><a 
  24.  
  25. >Priority</a></td><td><a >Hostname</a></td><td><a>Text</a></td></tr>";
  26. while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
  27. print "\t<tr>\n";
  28. foreach ($line as $col_value) {
  29. print "\t<td bgcolor=";
  30.  
  31. if ($col_value=="%Alert%") {
  32. print "#DD8787";
  33. } 
  34.  
  35. elseif ($col_value=="%Emergency%"){
  36. print "#DD6767";
  37. }
  38.  
  39. elseif ($col_value=="%Critical%"){
  40. print "#DD5757";
  41. }
  42.  
  43. elseif ($col_value=="%Error%"){
  44. print "#87DD91";
  45. }
  46.  
  47. elseif ($col_value=="%Warning%"){
  48. print "#FEFF87";
  49. }
  50.  
  51.  
  52. else {
  53. print "#dddddd";
  54. };
  55.  
  56.  
  57. print ">$col_value</td>\n";
  58. }
  59. print "\t</tr>\n";
  60. }
  61. print "</table>\n";
  62.  
  63. ?>


Jak na razie utknąłem i nie wiem co dalej z tym zrobić.
Proszę o pomoc.
TomASS
1. Zamiast
  1. <td bgcolor="....">
ładniej dać:
  1. <tr style="background-color: .....">

2. Po co ta "małpa":
  1. <?php
  2. @ $query=....
  3. ?>

3. Czy na prawde potrzebujesz tak komplikować zapytanie:
  1. SELECT *
  2. FROM syslogd.syslogd
  3. WHERE MsgDate='".mysql_escape_string($HTTP_GET_VARS['bydate'])."' AND (Msghostname
  4.  
  5. LIKE '".mysql_escape_string($HTTP_GET_VARS['Urzadzenie'])."' AND Msgpriority
  6.  
  7. LIKE '".mysql_escape_string($HTTP_GET_VARS['priority1'])."' OR Msgpriority
  8.  
  9. LIKE '".mysql_escape_string($HTTP_GET_VARS['priority2'])."' OR Msgpriority
  10.  
  11. LIKE '".mysql_escape_string($HTTP_GET_VARS['priority3'])."' OR Msgpriority
  12.  
  13. LIKE '".mysql_escape_string($HTTP_GET_VARS['priority4'])."' OR Msgpriority
  14.  
  15. LIKE '".mysql_escape_string($HTTP_GET_VARS['priority5'])."') ORDER BY

4. Zrób sobie:
  1. <?php
  2.  
  3. $query....
  4. $result = mysql_query($query);
  5. while ($row = mysql_fetch_array($result)){
  6.  print_r($row);
  7. }
  8.  
  9. ?>

I zobacz co Ci się wyświetla - być może nie ma tam wartości typu %Error% tylko jakieś całkiem inne - a jakie? To właśnie zobaczysz.
5. Zamiast tyle ifów/elsów możesz elegancko to napisać w tabeli albo dzięki switch.
6 Zamiast
  1. <?php
  2. print "#DD6767";
  3. ?>
pisz
  1. <?php
  2. print '#DD6767';
  3. ?>

7. Wyrzuć tą książkę - ona się do niczego nie nadaje tongue.gif
f41t3r
Cytat
2. Po co ta "małpa": 


A po to żeby mi brzydkich Notice-ów nie wyświetlał

Cytat
3. Czy na prawde potrzebujesz tak komplikować zapytanie:


Póki sie nie wymyśli czegoś wydajniejszego to raczej tak

Cytat
być może nie ma tam wartości typu %Error% tylko jakieś całkiem inne 


Niestety są sad.gif

Kod

(...)


Array ( [MsgDate] => 2006-02-27 [MsgTime] => 05:36:42 [MsgPriority] => Local7.Error [MsgHostname] => hpr-s10 [MsgText] => %LINK-3-UPDOWN: Interface FastEthernet0/19, changed state to down ) Array ( [MsgDate] => 2006-02-27 [MsgTime] => 05:36:44 [MsgPriority] => Local7.Error [MsgHostname] => hpr-s10 [MsgText] => %LINK-3-UPDOWN: Interface FastEthernet0/19, changed state to up ) Array ( [MsgDate] => 2006-02-27 [MsgTime] => 05:37:12 [MsgPriority] =>


(...)


P.S. switcha zrobiłem no i wygląda faktycznie troche bardziej przejrzyście.

Pozdro.
nospor
Cytat
A po to żeby mi brzydkich Notice-ów nie wyświetlał
TomASS to wie. mu chodzilo oto, ze przypsianie tekstu do zmiennej, nie generuje brzydkuch noticów smile.gif

Cytat
być może nie ma tam wartości typu %Error% tylko jakieś całkiem inne 

Niestety są
Niestety nie ma smile.gif
Pokaz mi w tym zrzucie gdzie znajdzisz : %Error% ? ja widze co najwyzej Local7.Error. Dla php to jest roznica. On nie szuka danych tak jak mysql przy pomocy %. Przejrzyj se zestaw tych funkcji, a znajdziesz coś do szukania smile.gif
http://pl.php.net/manual/pl/ref.strings.php
f41t3r
Hmm dobrze wiedzieć

P.S.

Dziwne bo mi notice wyświetla jak se odznacze w formularzu pare rzeczy sad.gif
Kod
Notice: Undefined index: priority3 in c:\program files\apc\enterprise manager\html\syslogd2\index2.php on line 99

Notice: Undefined index: priority4 in c:\program files\apc\enterprise manager\html\syslogd2\index2.php on line 99

Notice: Undefined index: priority5 in c:\program files\apc\enterprise manager\html\syslogd2\index2.php on line 99


Czegoś pewnie znowu nie wiem :/... standard.

Pozdro.
nospor
hmmm... no to ja sam sie czegos dowiedzialem smile.gif
Myslalem ze ta @ bedzie dotyczyc tylko przupisania, ale wynika, ze ona dotyczy calego etapu generowania przypisania, czyli i w tym przypadku funkcji mysql_escape_string() smile.gif. No ale takich rzeczy tak czy siak nie powinno sie tuszowac malpą, ale pisac poprawnie: czyli najpierw sprawdzic czy dany index jest, a dopiero potem go użyć
f41t3r
Na moim poziomie pisanie całkowicie poprawnych skryptów jest na razie nie możliwe. Niestety. :/

Btw. mam takiego switcha:

  1. <?php
  2.  
  3. print "<table border=0>\n";
  4. print "<tr><td><a>Date</a></td><td><a >Time</a></td><td><a 
  5.  
  6. >Priority</a></td><td><a >Hostname</a></td><td><a>Text</a></td></tr>";
  7. while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
  8.  
  9. switch ($col_value) {
  10. case 'Lpr.Error':
  11. $kolor="#FEFF87";
  12. break;
  13. case 'Warning':
  14. $kolor='#87DD91';
  15. break;
  16. case 'Alert':
  17. $kolor='#CC8787';
  18. break;
  19. case 'Critical':
  20. $kolor='#DD8787';
  21. break;
  22. case 'Emergency':
  23. $kolor='#DD8787';
  24. break;
  25. default:
  26. $kolor='#dddddd';};
  27.  
  28. print "\t<tr bgcolor='$kolor'>\n";
  29. foreach ($line as $col_value) {
  30. print "\t<td>$col_value</td>\n";
  31. }
  32. print "\t</tr>\n";
  33. }
  34. print "</table>\n";
  35. ?>


I mam pytanie czy muszę case'y dla wszystkich rodzajów errorów wypisywać ?
np.
Kod
case 'Lpr.Error':
  $kolor="#FEFF87";
  break;
case 'Local7.Error':
  $kolor="#FEFF87";
  break;
case 'Lolcal2.Error':
  $kolor="#FEFF87";
  break;


Czy można to jakoś zastąpić żeby tylko do tego wyrazu Error się odwoływał ?
nickers
Ja znam tylko taką możliwość:

  1. <?php
  2.  
  3. switch( $col_value )
  4. {
  5. case 'Lpr.Error':
  6. case 'Local7.Error':
  7. case 'Lolcal2.Error':
  8.  
  9.  $kolor="#FEFF87";
  10.  
  11. break;
  12. }
  13.  
  14.  
  15. ?>


Musisz wypisać wszystkie mozliowści, ale przynajmniej nie kopiujesz kodu.

Mam nadzieje, ze to nie jest cały kod, bo nie inicjujesz nigdzie: $col_value.
f41t3r
Aha no cóż, tego się obawiałem, no ale nic. Dzięki za odpowiedzi!

Pozdro.
nospor
mozna zachachmęcić smile.gif
  1. <?php
  2.  
  3. if (strpos($col_value, 'Error') !==false)
  4. $kolor='#FEFF87';
  5. else
  6. switch ($col_value) {
  7. case 'Warning':
  8. $kolor='#87DD91';
  9. break;
  10. case 'Alert':
  11. $kolor='#CC8787';
  12. break;
  13. case 'Critical':
  14. $kolor='#DD8787';
  15. break;
  16. case 'Emergency':
  17. $kolor='#DD8787';
  18. break;
  19. default:
  20. $kolor='#dddddd';};
  21. ?>
f41t3r
Wygląda rozsądniej niż to co ja teraz próbowałem kombinować tzn. pomyślałem że można wrzucić:

  1. <?php
  2.  
  3. similar_text($col_value, 'Error', $p1);
  4. similar_text($col_value, 'Warning', $p2);
  5. similar_text($col_value, 'Critical', $p3);
  6. similar_text($col_value, 'Emergency', $p4);
  7. similar_text($col_value, 'Alert', $p5);
  8.  
  9. if ($p1>$p2 && $p1>$p3 && $p1>$p4 && $p1>$p5) {
  10. print '#asdasd'
  11. }
  12.  
  13. ?>


poprawiam
---
nospor


i potem reszta ifów.

Jutro się jeszcze tym pobawie, dzięki jeszcze raz.

EDIT: Działa, dzięki wszystkim.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.