Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Kolorowanie warunkowe w pętli z wynikami
f41t3r
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 7.03.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
TomASS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
f41t3r
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 7.03.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
f41t3r
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 7.03.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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ć


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
f41t3r
post
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 7.03.2006

Ostrzeżenie: (0%)
-----


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ł ?
Go to the top of the page
+Quote Post
nickers
post
Post #8





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 6.02.2006
Skąd: Piła->Kotun();

Ostrzeżenie: (0%)
-----


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.


--------------------
Renesansowe Królestwa - gra RPG w średniowieczu. Zapraszam :)
Go to the top of the page
+Quote Post
f41t3r
post
Post #9





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 7.03.2006

Ostrzeżenie: (0%)
-----


Aha no cóż, tego się obawiałem, no ale nic. Dzięki za odpowiedzi!

Pozdro.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
f41t3r
post
Post #11





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 7.03.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował f41t3r 9.03.2006, 11:01:16
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 03:17