Formuła, która automatycznie zmienia status użytkownika

1

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.

3

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! 🤝

1

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.👍

0

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.

0
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.

0

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.

0

ja tylko dodam, że zamiast trzymać start_date to ja bym jednak wolał end_date okresu abonamentowego

1
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.