Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Raz na 24h dostępny kawałek treści
Forum PHP.pl > Forum > Gotowe rozwiązania
marcinrm5
Witam. Prosiłbym o stworzenie w php takiego czegoś by raz na 24h dodawało pkt po zalogowaniu. Mi udało się by dodawało raz na 24h pkt lecz po wylogowaniu i zalogowaniu znów dodaje się pkt.
Jak by pomogło to daję tu mój kod.
  1.  
  2. $time = $_SESSION['time']; //data ostatniego logowania
  3. $now = date("Y-m-d");
  4. $log = '10';
  5.  
  6. if ( $time == $now ) {
  7. echo "Nie mineły jeszcze 24h więc nie będzie pkt ^^";}
  8. else {
  9. $suma = $user['punkty'] + $log;
  10. mysql_query("UPDATE `themostp_prezent`.`uzytkownicy` SET `punkty` = '$suma',`time` = '$now' WHERE `uzytkownicy`.`id` =".$user['id']."");
  11. $_SESSION['time'] = date('Y-m-d');
  12. echo "Dodano $log denarów za poprawne logowanie dzisiaj! Następne pkt za logowanie możesz zdobyć za 24h!";
  13.  
  14. }
rzymek01
w tej chwili najlepszym sposobem wydaje mi się to: w tabeli z użytkownikami dodajesz pole data ostatniego dodania punktów
jeśli ta różnica pomiędzy obecną datą a tą zapisaną w bazie wynosi co najmniej 24h, wówczas, dodaj punkty i aktualizuj datę w bazie danych

można pomysleć o innych rozwiązaniach, zaciągnąc cron do pracy, ale powyższy jest prosty

edytując twój kod (posługuję się timestamp zamiast date):
  1. define('INTERWAL_CZASOWY', 60*60*24); // 24 godziny
  2.  
  3. $user; // obiekt klasy User
  4.  
  5. $time = $user->kiedyOstatnioDodanoPunkty(); // int
  6. $now = time();
  7. $log = '10';
  8.  
  9. if ( $now - $time < INTERWAL_CZASOWY ) {
  10. echo "Nie mineły jeszcze 24h więc nie będzie pkt ^^";}
  11. else {
  12. $suma = $user->points() + $log;
  13. mysqli_query("UPDATE `themostp_prezent`.`uzytkownicy` SET `punkty` = $suma,`czasOtrzymaniaPunktow` = $now WHERE `uzytkownicy`.`id` =".$user->id()."");
  14.  
  15. echo "Dodano $log denarów za poprawne logowanie dzisiaj! Następne pkt za logowanie możesz zdobyć za 24h!";
  16.  
  17. }
  18.  


- korzystaj z mysqli_* zamiast mysql_*
- punkty i czas są liczbą, więc nie dajesz `` w zapytaniu
- nie mieszaj nazw polskich z angielskimi
- jeszcze mogę dorzucić, że korzystanie z pojedynczych '' jest szybsze i czytelniejsze od "", a w ogóle ciekawą opcją jest sprintf, np.:
  1. mysqli_query(sprintf('UPDATE `themostp_prezent`.`uzytkownicy` SET `punkty` = %d,`czasOtrzymaniaPunktow` = %d WHERE `uzytkownicy`.`id` = %d', $suma, $now, $user->id());

kod od razu jest czytelniejszy
thek
Chłopie... Ile razy ten temat jeszcze walniesz na forum? 10?? Pogrzało Cie przy tym słoneczku już czy co? Zamknieto Ci go raz, zrobiłes kolejny, potem następne i teraz w kolejnym dziale znów? zamykam bo to juz przesada, zaraz zamkne wszytskie oprócz najstarszego niezamkniętego i jeszcze dam 10% za upór maniaka w otwieraniu tylu crossów.
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-2024 Invision Power Services, Inc.