Mam stronę napisaną w PHP połączoną z bazą danych. W bazie jest tabela UŻYTKOWNICY. W tabeli jest kolumna „Opłacony_abonament”. Jeżeli użytkownik ma opłacony abonament pozycja w kolumnie ustawiona jest na „1”, jeżeli abonament nie jest opłacony ustawienie jest „0”.
Mam skrypt, w którym po opłaceniu abonamentu przez Użytkownika ustawiam jego status na „1”.
Chciałbym mieć taką formułę, która będzie automatycznie zmieniała status Użytkownika z „1” na „0” po upływie 6 lub 12 miesięcy (kiedy upłynie jeden z okresów abonamentowych).
Jestem początkujący i nie wiem czy można to wykonać w skrypcie PHP czy może MySQL ma jakąś funkcję?
Wydaje mi się, że można stworzyć skrypt w javascript, który uruchomi skrypt w php, który wykona takie zadanie. Chciałbym jednak uniknąć javascript.
Z góry dziękuję za wszelkie sugestie.
Cześć @tomsal! Fajnie że zadałeś pytanie na forum.
Rozumiem że Twoim problemem jest to, że nie chcesz świadczyć użytkownikowi jakichś usług, jeśli czas od opłacenia jest większy niż 6 miesięcy?
Bo jeśli tak, to moim zdaniem najlepsze rozwiązanie polegałoby na dodaniu dodatkowej kolumny service_paid_at
typu date
lub timestamp
. Podczas opłacania abonamentu, należałoby w tym polu umieścić aktualną datę (np. now()
z mysql lub date()
z php). Następnie, w miejscu w którym sprawdzasz czy użytkownik ma ważny abonament, po prostu porównaj aktualną datę do daty service_paid_at
- jeśli różnica jest większa niż 6 miesięcy, wiesz że użytkownik nie ma usługi. To jest podejście które ja bym wybrał, bo wtedy nie musiałbym mieć żadnych dodatkowch usług (np. usługi cron, usługi w JS, etc.)
Drugim, alternatywnym wyjściem, byłoby skorzystanie z Crona, program który uruchamia pewną funkcję co określony czas. Tylko wtedy musiałbyś go dodać, i ustawić żeby co 6/12 miesięcy zmieniał to pole, tylko to wyjście jest mniej optymalne. Nie wybrałbym go, chyba że pierwsze wyjście z jakiegoś powodu byłoby nie dostępne.
Trzecie, moim zdaniem najgorsze wyjście, JavaScript - dlatego że kod JavaScript może być łatwo spreparowany przez użytkownika, ktoś mógłby być po terminie a i tak nadal korzystać z usługi.
@tomsal Daj znać czy masz jeszcze jakieś pytania!
Bardzo Ci dziękuję za szybką i wartościową odpowiedź. Nie chciałem nic sugerować ale tak właśnie myślałem, aby sprawdzać upływający czas za każdym razem kiedy zapytanie SQL będzie dotyczyło Użytkownika. Dziękuję, skorzystam z Twoich rad.
Trzecie, moim zdaniem najgorsze wyjście, JavaScript
Co do dwóch pierwszych pomysłów - w pełni się zgadzam, sam chciałem napisać to samo, ale byłeś szybszy ;)
Ale trzeciego - z użyciem JS, nie rozumiem. Czy możesz @Riddle wyjaśnić, co miałeś na myśli?
Podejrzewam, że chodzi o odpytanie przez front serwera o to, czy dany user ma aktywną subskrypcję i na tej podstawie wyświetlenie albo ukrycie pewnych treści.
Ale serwer i tak musi wiedzieć, czy pacjent jest opłacony czy nie, więc i tak wracamy do sedna problemu - jak to trzymać w bazie.
Także prośba - napisz, o co chodziło z tym JS'em.
cerrato napisał(a):
Trzecie, moim zdaniem najgorsze wyjście, JavaScript
Co do dwóch pierwszych pomysłów - w pełni się zgadzam, sam chciałem napisać to samo, ale byłeś szybszy ;)
Ale trzeciego - z użyciem JS, nie rozumiem. Czy możesz @Riddle wyjaśnić, co miałeś na myśli?
Podejrzewam, że chodzi o odpytanie przez front serwera o to, czy dany user ma aktywną subskrypcję i na tej podstawie wyświetlenie albo ukrycie pewnych treści.
Ale serwer i tak musi wiedzieć, czy pacjent jest opłacony czy nie, więc i tak wracamy do sedna problemu - jak to trzymać w bazie.Także prośba - napisz, o co chodziło z tym JS'em.
Wydawało mi się że jednym z pomysłów autora było to, żeby w przeglądarce użytkownika liczyć czas, a potem uruchomić jakiś skrypt JS który uderzy do serwera i powie "czas minął, dezaktywuj mnie". Gdyby tak to działało, to użytkownik mógłby z łatwością zablokować taki skrypt, i jego subskrypcja nigdy by nie wygasła.
Wydawało mi się że jednym z pomysłów autora było to, żeby w przeglądarce użytkownika liczyć czas, a potem uruchomić jakiś skrypt JS który uderzy do serwera i powie "czas minął, dezaktywuj mnie". Gdyby tak to działało, to użytkownik mógłby z łatwością zablokować taki skrypt, i jego subskrypcja nigdy by nie wygasła.
W pierwszym poście była mowa o miesiącach, więc raczej nikt tak długo nie będzie trzymać aktywnej sesji. Raczej (aczkolwiek to są, zarówno Twoje, jak i moje, domysły) chodzi o sprawdzenie podczas logowania, albo podczas próby wykonania określonych czynności/pobrania jakichś danych z serwera itp.
ja tylko dodam, że zamiast trzymać start_date to ja bym jednak wolał end_date okresu abonamentowego
abrakadaber napisał(a):
ja tylko dodam, że zamiast trzymać start_date to ja bym jednak wolał end_date okresu abonamentowego
Tylko że z end_date
trzeba ustalić długośc usługi od razu, a mając start_date
można decydować o długości już w czasie jej trwania.