Za darmo na e-mailPraktyczny kurs PHP (aż 200 stron!)

Krok po kroku, opanuj podstawy PHP za darmo - praktyczny kurs w formie e-booka prosto na Twój e-mail

Tło komórki w zależności od czasu

2.85K views
0
0 Comments

Witam

Jak zrobić żeby tło komórki zmieniało się w zależności od czasu pozostającego do wyznaczonego terminu?

<table>
<tr>
<td style="width: 10%; text-align: center;">Lp</td>
<td style="width: 45%; text-align: center;">Data</td>
<td style="width: 45%; text-align: center;">Termin</td>
</tr>
 <?php
$czas = date("Y-m-d");
 mysqli_query($connect, 'SET @i:=0');
$zapytanie = "SELECT *, @i:=@i+1 Lp FROM tabela";
$wykonaj = mysqli_query ($connect, $zapytanie);
 while ($wiersz=mysqli_fetch_array ($wykonaj))
 function kolorczas() {
if(strtotime($wiersz['termin']) <= strtotime("$czas +3 day"))
    echo "<td style=\"background-color:orange;\">" . $wiersz['termin'] . "</td>";
else
    echo "<td style=\"background-color:blue;\">" . $wiersz['termin'] . "</td>";
}
 {
echo "<tr><td>" . $wiersz['Lp']. "</td><td>" . $czas . "</td>" . kolorczas() . "</tr>";
}
?>
</table>

Marcin Wesel Answered question 16 października 2020
Add a Comment
0
Jacek Kołcon (gość) 7 Komentarzy

Pewnie nie trafię z odpowiedzią, ale może chodzi o pewną ingerencję w wygląd kodu?

<table>
<tr>
<td style="width: 10%; text-align: center;">Lp</td>
<td style="width: 45%; text-align: center;">Data</td>
<td style="width: 45%; text-align: center;">Termin</td>
</tr>
<?php
function kolorczas($t1, $t2) {
if(strtotime($t1) <= strtotime("$t2 + 3 day"))
echo "<td style=\"background-color:orange;\">" . $t1 . "</td>";
else
echo "<td style=\"background-color:blue;\">" . $t1 . "</td>";
}
 $czas = date("Y-m-d");
mysqli_query($connect, 'SET @i:=0');
$zapytanie = "SELECT *, @i:=@i+1 Lp FROM tabela";
$wykonaj = mysqli_query ($connect, $zapytanie);
while ($wiersz=mysqli_fetch_array ($wykonaj)) {
echo "<tr><td>" . $wiersz['Lp']. "</td><td>" . $czas . "</td>" . kolorczas($wiersz['termin'],$czas) . "</tr>";
}
?>
</table>

Jacek Kołcon Posted new comment 18 października 2020

Dzięki – o to właśnie chodziło. Zastosowałem złą funkcję w złym miejscu…
Po przerobieniu na Twoją wersję działa, ale jest jeden problem.
Komórka z funkcją wyświetla się nie na swoim miejscu, tylko niejako przed tabelą.
Sprawdziłem znaczniki i ilości komórek w wierszu, ale wygląda, że wszystko jest ok.
Co może być przyczyną takiego wyświetlania?

Marcin, jest błąd w Autorze komentarza – powinienem być ja (Andrzej)

Tak, właśnie widzę. Muszę sprawdzić o co chodzi. Dzięki!

Nazwy gości przy komentarzach już działają poprawnie.

Zwykle przy “składankach” unikam funkcji echo jak ognia! Rekomenduję użyć zmiennej np $str i robić tak:
$str = ”; // inicjacja
gdzieś w kodzie kolejno:
$str .= ‘;
$str .= jakas_funkcja($par1);
i tak dalej
i na końcu wchodzi echo całe na biało !
echo $str;
W kolejnym komentarzu poprawię funkcję na taką formę.

Lp
Data
Termin

<?php
function kolorczas($t1, $t2) {
if(strtotime($t1) <= strtotime("$t2 + 3 day"))
return "” . $t1 . “”;
else
return “” . $t1 . “”;
}

$str = ”;

$czas = date(“Y-m-d”);
mysqli_query($connect, ‘SET @i:=0’);
$zapytanie = “SELECT *, @i:=@i+1 Lp FROM tabela”;
$wykonaj = mysqli_query ($connect, $zapytanie);
while ($wiersz=mysqli_fetch_array ($wykonaj)) {
$str .= “” . $wiersz[‘Lp’]. “” . $czas . “”;
$str .= kolorczas($wiersz[‘termin’],$czas);
$str .= “”;
}
//var_dump($str);
echo $str;
?>

Wielkie dzięki Jacku za pomoc i poradę! Działa elegancko 🙂

Add a Comment
0

Hej Andrzeju,

problemem jest policzenie, ile czasu zostało do danej daty, czy też pokolorowanie komórki?

Z tego co widzę, poprawnie ustawiasz background-color w CSS, stąd zakładam, że w liczeniu daty jest trudność.

Do dat polecam klasę DateTime, której możesz używać obiektowo lub proceduralnie. Do policzenia różnicy możesz użyć metody diff:

<php
$start = '2020-10-15 20:25'; 
$end   = '2020-10-16 21:21'; 
$dateStart = new DateTime($start); 
$dateEnd   = new DateTime($end); 
$difference = $dateStart->diff($dateEnd); 
// w obiekcie $difference jest zawarta różnica w czasie
$difference->days; // tutaj jest liczba dni
$difference->h; // tutaj godzin, z tym że gdy wartość osiągnie 24, liczba dni zwiększa się o 1 a godziny wracają do zera
$roznica_w_godzinach = $difference->days * 24 + $difference->h;

Natomiast wersja z strtotime również powinna zadziałać bez problemu.

Opiszesz dokładniej, co konkretnie nie działa?

Marcin Wesel Edited answer 16 października 2020
Add a Comment
Write your answer.
Ominiesz taką okazję?Praktyczny Kurs PHP (aż 200 stron!) za darmo

Gorąco polecam, naprawdę warto skorzystać! To nic nie kosztuje. Krok po kroku, opanuj podstawy PHP za darmo - praktyczny kurs w formie e-booka prosto na Twój e-mail.