Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP i MySQL]Czas obecny a rekord z bazy-jak porównac aby sformatować?
Forum PHP.pl > Forum > Przedszkole
walldeck
Czy idzie pobierając dane z tabeli o wartosci TIME porownac z aktualnym czasem i powidzmy kiedy zbliza sie data jej uplyniecia pogrubia oraz wyswietla, formatuje ten tekst z tabeli(chodzi o ta date) na kolor czerwony wywalając stosowny komunikat??
Chrom
idzie
time" title="Zobacz w manualu PHP" target="_manual

pobierz dane i porównaj użyj do tego w/w funkcji i w zależności od ilości pozostałego czasu zastosuj kolorowanie
walldeck
jakiś konkretny przykład jak to zrobić?
Wieviór
Cytat(walldeck @ 5.03.2008, 00:00:00 ) *
jakiś konkretny przykład jak to zrobić?


Znajduje się zapewne w manualu.
Chrom
kliknij w link tam jest 90% tego czego potrzebujesz co do pozostałego 20% to wystarczy zwykłe if i trochę CSS
-walldeck-
Zrobiłem coś takiego:
  1. <?php
  2. include "polaczenie.php";
  3. $today = date("m.d.y");
  4.  
  5. echo "$today";
  6.  
  7.  
  8.  
  9. $query = mysql_query("SELECT data_wysylki FROM zlecenia ");
  10. $result = mysql_fetch_array($query)
  11. or die ("niepoprawne zapytanie: " .mysql_error());
  12. if ($result = $today) {
  13. echo "<font color='red' size='5'>";
  14. echo"<br>";
  15. echo "Dzisiaj termin wyslania zlecenia";
  16.  
  17. }
  18.  
  19. else {
  20. echo "pozostalo jeszcze" ;
  21. $wynik = ($today - $result);
  22. echo "$wynik";
  23.  echo "DNI";
  24. }
  25. ?>


Ale nie działa mi to prawidłowo, ponieważ gdy zmieniam datę systemową wstecz to powinien pojawić sie else a tak nie jest. Dlaczego?
walldeck
Poprawiłem troche kod gdyż chciałem aby wyświetlał mi te numery zleceń ktore powinny dzisiaj wyjechać zgodnie z datą :

  1. <?php
  2. include "polaczenie.php";
  3. $today = date("m.d.y");
  4.  
  5. echo "$today";
  6.  
  7.  
  8.  
  9. $query = mysql_query("SELECT numer_zlecenia FROM zlecenia WHERE 'data_wysylki' LIKE '%" .$today. "'");
  10. $result = mysql_query($query);
  11. $num_results = mysql_num_rows($result);
  12.  
  13.  
  14. print "<p>Ilosc zlecen wysylanych dzisiaj: " .$num_results. "</p>";
  15. for ($i=0; $i <$num_results; $i++) {
  16. $row = mysql_fetch_array($result);
  17. print ($i+1).". ";  
  18. echo "numery zlecen: "; 
  19. print stripslashes($row["numer_zlecenia"]);
  20.  
  21. }
  22. ?>


Lecz mam tego typu problem:
Cytat
03.04.08
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\data.php on line 11

Ilosc zlecen wysylanych dzisiaj:
maziak
Witaj, tak jak porownujesz aktualnie, PHP najprawdopodobniej porownuje to jako ciag znakow, co raczej nie da poxadanego efektu, nie jestem pewny nie mam czasu sie blizej temu teraz przyjzec, jednak jezeli moge doradizc ja bym to zrobil inaczej. Mianowicie,
date wyciagana z bazy traktujesz funkcja strtotime" title="Zobacz w manualu PHP" target="_manual, aktualna date wyciagasz w postaci znacznika czasu i wtedy porownujesz czy wieksze czy mniejsze.

przyjzyj sie i przeczytaj dokladnie obydwie funkcje w manualu date" title="Zobacz w manualu PHP" target="_manual, strtotime" title="Zobacz w manualu PHP" target="_manual a jestem calkowicie pewny ze bedziesz w stanie to zrobic sam.

Pozdrawiam.

ps. tu po Polsku
http://php.net.pl/manual/pl/function.strtotime.php
http://php.net.pl/manual/pl/function.date.php
c0cr0ach
@walldeck
Warninga wyrzuca Ci dlatego, że $result nie ma poprawnego formatu. Aby Twój $result był prawidłowym parametrem dla takich funkcji, jak mysql_num_rows() czy mysql_fetch_array(), część kodu powinna wyglądać tak:
  1. <?php
  2. $query = "SELECT numer_zlecenia FROM zlecenia WHERE data_wysylki LIKE '%" .$today. "'";
  3. $result = mysql_query($query);
  4. $num_results = mysql_num_rows($result);
  5. ?>

lub tak:
  1. <?php
  2. $result = mysql_query("SELECT numer_zlecenia FROM zlecenia WHERE data_wysylki LIKE '%" .$today. "'");
  3. $num_results = mysql_num_rows($result);
  4. ?>

Zauważ, że zapytanie przetworzone już raz przez mysql_query() potraktowałeś ponownie tą samą funkcją.
walldeck
Cytat
Zauważ, że zapytanie przetworzone już raz przez mysql_query() potraktowałeś ponownie tą samą funkcją.

dzięki c0cr0ach, to faktycznie niedopatrzenie z mojej strony.
Lecz nadal wynik nie zwraca mi tego czego bym chciał. Dodałem do bazy zlecenie z datą wysyłki na dzisiaj i mimo wszytko jest 0. Powinno wyróżnić numer tego zlecenia.
Jak potraktuje echo ten $result z bazy to mam taka wartość "
Cytat
Resource id #4

Wartość $num_results ma 0.
Zmieniłem już format daty dla $today na (y,m,d) bo było oo na odwrót i jest to samo

Wydaje mi sie że problem leży w zapytaniu ponieważ gdy wrzucam to do phpmyadmina zwraca zawsze zero bez wzgledu na to czy wywoluje date czy inny rekord z tej tabeli i porownuje na zasadzie LIKE. Moze ktos rzucic okiem czy to zapytani jest dobrze sformułowane?
c0cr0ach
@walldeck, zauważyłem błąd w zapytaniu (też go wcześniej nie znalazłem rolleyes.gif ) - data_wysylki nie powinna się znaleźć w apostrofach, bo nie będzie wtedy traktowana, jako kolumna. Nie wiem w jakim formacie masz datę w swojej tabeli (chodzi mi o to, czy pole data_wysylki jest typu varchar lub date). Jeżeli chcesz, żeby like zadziałał w tym zapytaniu format zmiennej $today musi wyglądać tak: 'Y-m-d' (przy założeniu, że Twoje pole data_wysylki jest typu date; w takim formacie występuje data w tabelach baz MySQL).
Co do $result, wszystko jest w porządku, z tym że rezultat musisz jeszcze potraktować np. mysql_fetch_array(). Jeśli masz wątpliwości, czy rezultat jest poprawnym zasobem bazodanowym, sprawdzaj to używając funkcji: is_resource(). Jako parametr podajesz w tym wypadku $result.
walldeck
Ale rekord (data_wysylki) nie jest w apostrofach:> więc nie wiem co masz na myśli...
Pole data_wysylki jest typu DATE i zgadza sie z formantem $today bo juz to poprawiłem.
poproszę o poprawne zapytanie bo nie wiem nadal gdzie leży bład...
Wieviór
Na mój gust, nie można użyć LIKE przy polu typu date, no bo niby jak MySQL ma to interpretować? Czy dzisiaj jest "trochę" jak wczoraj? Czy 4 maja jest LIKE jak 7 maja?

Chcesz by pogrubiał jak data się równa, czy jak jest podobna? Możesz np. użyć funkcji month() w zapytaniu, by pokazał z tego miesiąca, week() by z tego tygodnia, możesz ew. zrobić zmienną $data1 = np. 3 dni do przodu od dzisiaj i pogrubiać te, gdzie date =< $data1.

Zainteresuj się tym co napisał Ci maziak.
c0cr0ach
Cytat(walldeck @ 6.03.2008, 15:57:12 ) *
Ale rekord (data_wysylki) nie jest w apostrofach:> więc nie wiem co masz na myśli...
Pole data_wysylki jest typu DATE i zgadza sie z formantem $today bo juz to poprawiłem.

data_wysylki nie jest już w apostrofach, bo edytowałem mojego wcześniejszego posta. Wieviór ma rację. Jeżeli potraktujesz datę like'iem, wyświetli Ci wyniki tylko dla rekordów tabeli, których wartość kolumny data_wysylki będzie dokładnie równa wartości zmiennej $today. Tak więc trochę mija się to z celem.
Wieviór
Cytat(c0cr0ach @ 6.03.2008, 19:07:43 ) *
Wieviór ma rację. Jeżeli potraktujesz datę like'iem, wyświetli Ci wyniki tylko dla rekordów tabeli, których wartość kolumny data_wysylki będzie dokładnie równa wartości zmiennej $today. Tak więc trochę mija się to z celem.


Tak stanie się tylko wtedy, gdy jeszcze usuniesz z tego zapytania '%'. Tylko wtedy LIKE zadziała jak zwykły WHERE.

EDIT: Widocznie MySQL to ignoruje, spoko ;]
c0cr0ach
Cytat(Wieviór @ 6.03.2008, 17:28:35 ) *
Tak stanie się tylko wtedy, gdy jeszcze usuniesz z tego zapytania '%'. Tylko wtedy LIKE zadziała jak zwykły WHERE.

Nawet z '%' działa jak zwykły WHERE, ale bez obaw - nie mam zamiaru się z nikim kłócić. Zaobserwowałem taki efekt podczas testowania prostego skryptu.
walldeck
Poszło bez LIKE. dzięki chłopaki.
Cytat
$query = ("SELECT numer_zlecenia FROM zlecenia WHERE data_wysylki LIKE '$today' ");
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.