Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Kolorowanie tabeli zależne od dat
Forum PHP.pl > Forum > Przedszkole
zaworek
Witam,

nie mogę sobie poradzić z warunkiem kolorującym wiersze tabeli. Chciałbym je uzależnić od daty jaka występuje w kolumnie done.
Datę mam w formacie Y-m-d. Kod który już po części działa jest poniżej.
Jak zapisać warunek aby np. czerwony kolor wiersza zaczynał się już od 30 dni przed zadaną datą (done) oraz po jej przekroczenia?
  1. // łączenie z bazą i wyświetlanie w pętli jest w kodzie powyżej którego nie zamieszczam
  2.  
  3. $dzis = date('Y-m-d'); //dzisiejsza data w formacie RRRR-MM-DD
  4. $termin = date('Y-m-d',strtotime('-30 days',strtotime(date('Y-m-d')))); //data 30 dni wstecz od dnia bieżącego
  5.  
  6. if($wiersz['done'] <= $dzis){$style = 'style="background-color: #81CF84;"';} //zielony jeżeli data w done <= dzis
  7. if($wiersz['done'] > $dzis){$style = 'style="background-color: #EF2C2C;"';} // czerwony jeżeli data w done > dzis
  8.  
  9. echo '<tr>
  10. <td align="center" '.$style.'>'.$wiersz['dana1'].'</td>
  11. <td align="center" '.$style.'>'.$wiersz['dana2'].'</td>
  12. </tr>';
  13.  
  14. //tu dalsza część kodu...


Ulysess
hmm miedzy 1 a 2 warunkiem zrob:
$dzis = strtotime($dzis)-2592000;
$dzis = date('Y-m-d',$dzis);

czemu 2592000 questionmark.gif ponieważ to 30 dni w postaci unixowej
zaworek
Niestety nie działa to jak powinno. Kod aktualnie mam taki:

  1. $dzis = date('Y-m-d');
  2. {
  3. if($wiersz['done'] <= $dzis){$style = 'style="background-color: #81CF84;"';} //zieleń
  4. $dzis = strtotime($dzis)-2592000; //30dni od dzis
  5. $dzis = date('Y-m-d',$dzis);
  6. if($wiersz['done'] > $dzis){$style = 'style="background-color: #EF2C2C;"';} // red
  7.  
  8. echo '<tr>
  9. <td align="center" '.$style.'>'.$wiersz['dana1'].'</td>
  10. <td align="center" '.$style.'>'.$wiersz['dana2'].'</td>
  11. </tr>';
  12.  
  13. //tu dalsza część kodu...


Jeżeli w tabeli będą np. 3 rekordy z taką samą datą w polu done to tylko pierwszy z nich pokoloruje się poprawnie, pozostałe będą już innego koloru ponieważ zmienna $dzis uległa zmianie.
nekomata
Wierzę ze chodzi ci o takie coś
  1. $data['dzis'] = date('Y-m-d');
  2. $data['termin'] = date('Y-m-d',strtotime('-30 day')); //30dni od dzis
  3. if($wiersz['done'] <= $data['dzis']){$style = 'style="background-color: #81CF84;"';}
  4. if($wiersz['done'] > $data['termin']){$style = 'style="background-color: #EF2C2C;"';}
W obu przypadkach nie trzeba tworzyć zmiennej , można się bezpośrednio odwołać.. (ba jest to nawet zalecane jeśli nie masz zamiaru używać tych samych dat potem). Dane w array'u bo nie lubię jak mi zmienne nieposegregowane biegają.
zaworek
@nekomata dziękuję

podpowiedziałbyś mi jeszcze jak powinien wyglądać warunek dla poniższego przykładu:

w tabeli są np. 3 wiersze (generalnie jest ich więcej):

1: data w kolumnie done to 2011-06-01
dziś jest 2011-05-09 czyli do powyższej daty jest < 30 dni zatem wiersz kolorujemy na czerwono

2: data w kolumnie done to 2011-07-01
dziś jest 2011-05-09 czyli do powyższej daty > 30 dni zatem wiersz kolorujemy na zielono

3: data w kolumnie done to 2011-05-09
data zgodna z datą dzisiejszą zatem kolorowanie się wyłącza lub mamy kolor np. biały
nekomata
  1. $data['dzis'] = date('Y-m-d');
  2. $data['termin'] = date('Y-m-d',strtotime('-30 day')); //30dni od dzis
  3. if($wiersz['done'] == $data['dzis']){ $style = '' ; }
  4. if($wiersz['done'] < $data['dzis']){$style = 'style="background-color: #81CF84;"';}
  5. if($wiersz['done'] > $data['termin']){$style = 'style="background-color: #EF2C2C;"';}
Z palca ale powinno pójść.
zaworek
wszystkie 3 wiersze pokolorowało mi na czerwono czyli wykonał się ostatni warunek

  1. if($wiersz['done'] > $data['termin']){$style = 'style="background-color: #EF2C2C;"';}
nekomata
Ehh racja bo dałem - 30 dni zamiast + 30 dni , łap poprawkę
  1. $data['dzis'] = date('Y-m-d');
  2. $data['termin'] = date('Y-m-d',strtotime('+30 day')); //30dni od dzis
  3. if($wiersz['done'] > $data['termin']){$style = 'style="background-color: #81CF84;"';}//Powyzej 30 dni
  4. elseif($wiersz['done'] <= $data['termin']){$style = 'style="background-color: #EF2C2C;"';}//Ponizej lub rowne 30 dni
  5. elseif($wiersz['done'] == $data['dzis']){ $style = 'style="background-color: black;"' ; }//Dzisiaj
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.