Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Konto "premium", problem zakończeniu
Forum PHP.pl > Forum > Przedszkole
Mlody993
Witam,
próbuję zrobić coś w formie konta "premium". Chcę dawać użytkownikom udzielającym się opcję wyłączenia reklam na stronie.

Mam skrypt sprawdzający datę aktywacji, ilość dni no i on dezaktywuje bądź nie reklamy. Wszystko działa w porządku, kiedy mamy aktywne konto "premium", kiedy się skończy też jest ok, bo reklamy się pokazują. Problem jest natomiast po upływie np. 30 dni po zakończeniu konta premium. Mianowicie reklamy znów się wyłączają, pojawia się komunikat o koncie premium mimo tego, że daty są stare:
Data płatności: 10.04.2016
Reklamy wyłączone do: 10.05.2016


Mój kod wygląda tak:
  1. <?php
  2. $uzytkownik = $_SESSION['id'];
  3. function sprawdz_premium($uzytkownik) {
  4. $us = $_SESSION['id'];
  5. $dane = mysql_fetch_array(mysql_query('SELECT * FROM `premium` WHERE `user` = "'.$us.'"'));
  6. $zakup = $dane['data_zakupu'];
  7. $okres = $dane['okres'];
  8. $wynik = date( 'd.m.Y', strtotime($zakup .' +'.$okres.' day' ));
  9.  
  10. $czas = time();
  11. $teraz = date('d.m.Y', $czas);
  12. if($teraz <= $wynik) {
  13.  
  14. $dostep = true;
  15. } else {
  16.  
  17.  
  18. $dostep = false;
  19. }
  20. return $dostep;
  21.  
  22. }
  23. ?>


Spróbowałem też dodać linijkę, aby po skończeniu premium usuwało dane z bazy danych.
  1. if ($teraz > $wynik) {
  2. mysql_query("DELETE FROM premium WHERE user=".$_SESSION["id"]."");
  3. }


Problem natomiast wtedy jest taki, że jeśli użytkownik z wyłączonymi reklamami zaloguje się ponownie dopiero np. po miesiącu od daty zakończenia, to nadal będzie miał wyłączone reklamy. ;/
SwiezuPL
1.http://php.net/manual/en/class.mysqli.php
2. mozesz uzyc porownywania za pomoca bazy danych http://dev.mysql.com/doc/refman/5.5/en/dat...-functions.html
3. jak sie uprzesz, zrob to na przykladzie;


  1. $time1 = time(); // teraz w sekundach
  2. $db = '2017-07-05 16:16:16'; //data z db, czyli chyba twoja zmienna $dane['okres']
  3. $time2 = strtotime($db); // ... i dajemy go do sekund
  4. if ($time2 < $time1) // warunek
  5. echo "teraz czas jest po podanej dacie"; // wynik


Ta data płatności jeśli służy tylko do tego porównania, to jest usless.
Mlody993
Nadal niewiele mi to pomogło. Twój sposób porównuje tylko aktualny czas z czasem zakupu nie biorąc pod uwagę, że możemy mieć jeszcze aktywne np. 10 dni.


@edit:
Dobra, udało się. ;-) Trochę pomyślałem i działa.

  1. $wynik = date( 'd.m.Y', strtotime($zakup .' +'.$okres.' day' ));
  2. $wazne = strtotime($wynik);
  3. $czas = time();
  4.  
  5. if($czas <= $wazne) {
  6.  
  7. $dostep = true;
  8. }


Wystarczyło przerobić na strtotime. ;-) Dziękuje koledze wyżej za pomoc.
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.