Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Punkty
Forum PHP.pl > Forum > Przedszkole
Killerek
Witam, stworzyłem sobie logowanie i chce aby za każde logowanie ale co 24h do kolumny punkty dodawało +10 stworzyłem więc takie zapytanie
  1. $wynik=mysql_query("UPDATE $tabela SET `punkty`=`punkty`+10, ostatnio=NOW() WHERE login='$login'");
i działa lecz za każdym razem gdy się zaloguje dodaje mi +10 punktów a ja chcę aby było co 24h w bazie mam zapis ostatniego logowania w kolumnie ostatnio. Co zrobić? Jak to zrobić?
Damonsson
...AND (ostatnio+24h) >= NOW()

odnośnie działanie w nawiasie odsyłam do mysql'owego manuala.


W sumie to nie zadziała, bo 'ostatnio' ciągle Ci się aktualizuje po zalogowaniu.

Może odpalaj skrypt CRONem przykładowo o 00:01 i po prostu sprawdzaj, czy dzień wcześniej było logowanie na to konto.
Killerek
Cytat(Damonsson @ 15.12.2012, 21:33:42 ) *
...AND (ostatnio+24h) >= NOW()

odnośnie działanie w nawiasie odsyłam do mysql'owego manuala.


W sumie to nie zadziała, bo 'ostatnio' ciągle Ci się aktualizuję po zalogowaniu.

Może odpalaj skrypt CRONem przykładowo o 00:01 i po prostu sprawdzaj, czy dzień wcześniej było logowanie na to konto.


Czyli ma to wyglądać tak:
  1. $wynik=mysql_query("UPDATE $tabela SET `punkty`=`punkty`+10, ostatnio=NOW() WHERE login='$login' AND (ostatnio+24h) >= NOW()");


czy

  1. $wynik=mysql_query("UPDATE $tabela SET `punkty`=`punkty`+10, ostatnio=NOW() AND (ostatnio+24h) >= NOW() WHERE login='$login'");


czy zupełnie inaczej?

//edit

o CRONie nie mam zielonego pojęcia...
Damonsson
Nie, bo ten warunek nigdy nie będzie spełniony, chyba, że ktoś zaloguje się tylko i wyłącznie raz na 24h, jak zaloguje się częściej to ciągle będzie opóźniał ten czas i w sumie to nigdy nie będzie różnicy większej niż 24h.

Jak nie chcesz się brać za Crona, to możesz spróbować zrobić nową kolumnę w tabeli i w przypadku dodania punktów nadawać jej np status 1 i sprawdzać tak:
UPDATE $tabela SET status=1, `punkty`=`punkty`+10, ostatnio=NOW() WHERE login='$login' AND (ostatnio+24h) >= NOW() AND status = '1'

Oczywiście musisz na start jakoś przypisać ten status 1, żeby było się do czego odwoływać, np podczas rejestracji.

(ostatnio+24h) - to jest pseudokod

Killerek
Cytat(Damonsson @ 15.12.2012, 21:46:50 ) *
Nie, bo ten warunek nigdy nie będzie spełniony, chyba, że ktoś zaloguje się tylko i wyłącznie raz na 24h, jak zaloguje się częściej to ciągle będzie opóźniał ten czas i w sumie to nigdy nie będzie różnicy większej niż 24h.

Jak nie chcesz się brać za Crona, to możesz spróbować zrobić nową kolumnę w tabeli i w przypadku dodania punktów nadawać jej np status 1 i sprawdzać tak:
UPDATE $tabela SET status=1, `punkty`=`punkty`+10, ostatnio=NOW() WHERE login='$login' AND (ostatnio+24h) >= NOW() AND status = '1'

Oczywiście musisz na start jakoś przypisać ten status 1, żeby było się do czego odwoływać, np podczas rejestracji.

(ostatnio+24h) - to jest pseudokod



kolumna status odpowiada za to czy konto jest aktywowane czy jest zbanowane itp.

Jak możesz to przyjmij na GG wysłałem zaproszenie.

jak zrobiłem
  1. $wynik=mysql_query("UPDATE $tabela SET status=1, `punkty`=`punkty`+10, ostatnio=NOW() WHERE login='$login' AND (ostatnio+24h) >= NOW() AND status = '1'");
to w ogóle nie dodaje punktów.
vifus
Cytat(Damonsson @ 15.12.2012, 21:46:50 ) *
(ostatnio+24h) - to jest pseudokod

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.