Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Konto "premium", problem zakończeniu
Mlody993
post 6.07.2016, 01:06:30
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 12.02.2009

Ostrzeżenie: (0%)
-----


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. ;/
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
SwiezuPL
post 6.07.2016, 02:37:24
Post #2





Grupa: Zarejestrowani
Postów: 38
Pomógł: 9
Dołączył: 16.11.2014
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował SwiezuPL 6.07.2016, 02:42:52
Go to the top of the page
+Quote Post
Mlody993
post 6.07.2016, 04:59:38
Post #3





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 12.02.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Mlody993 6.07.2016, 05:53:44
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 17.06.2025 - 16:23