Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: limit ruchu po stronie
Forum PHP.pl > Forum > Przedszkole
stokrotka
Witam serdecznie.
Probuje zrobic cos takiego:
Uzytkownik sie rejestruje (to juz mam), loguje (rowniez dziala) ale po wejsciu ma ograniczony limit ruchu... w sensie takim, ze do kazdego uzytkownika, w bazie bedzie podana wartosc ile klikniec moze wykonac (to jest w miare do zrobienia) na tomiast problem mam z tym, zeby wartosc w kolumnie ruch po godzinie wzrastala o 5 - i tu jest problem. Wie ktoś jak to zrobic? blink.gif
dr_bonzo
Uzyj sesji. Gdy user wchodzi na dowolna ze stron zmniejszasz wartosc zmiennej sesyjnej o 1 (licznik dostepnych klikniec). Gdy jest == 0 to user nie moze nic wiecej obejrzec.
A zwiekszanie ilosci mozliwych klikniec co godzine to zalatwisz cron'em, lub podlacz pod strone skrypt ktory bedzie sprawdzal (przy wejsciu dowolnego usera na dowolna strone) czy minela juz godzina.
Pigula
Cytat
lub podlacz pod strone skrypt ktory bedzie sprawdzal (przy wejsciu dowolnego usera na dowolna strone) czy minela juz godzina.

dokladnie ile minelo godzin i mnozysz przez 5, bo uzytkownik mogl sie nie logowac np. przez 4 godziny
stokrotka
Cytat(dr_bonzo @ 2005-09-23 10:48:25)
podlacz pod strone skrypt ktory bedzie sprawdzal (przy wejsciu dowolnego usera na dowolna strone) czy minela juz godzina.

Ale ja wlasnie o to pytam... czy ktos zna moze taki skrypt, albo wie jak go napisac? jak polaczyc czas ze zmiana wartosci w tabeli dla danego usera.
gladiror
Zrobisz w tabeli kolumny "ostanie logowanie-data" i "ostanie logowanie-godzina". Gdy sie uzytkownik zaloguje to zostanie zapisana data i godzina... Później na każdej stronie robisz porównanie z bazą danych. If różnica pomiędzy czasem rzeczywistym, a czasem w tabeli jest większa od 1 godziny to usuwa sesje, w przeciwnym razie dalej sesja istnieje... O to chodziło??
stokrotka
Raczej nie godzine po wejsciu, a o pelnej godzinie ruch +5
gladiror
Czyli chodzi o to, że w przeciągu godziny użytkownik ma 5 ruchów? I jeżeli wykorzysta te ruchy to już nie może więcej chodzić po stronie, chyba, że nadejdzie kolejna godzina od daty ostatniego logowania?questionmark.gif
stokrotka
Cytat(gladiror @ 2005-09-23 11:53:51)
Czyli chodzi o to, że w przeciągu godziny użytkownik ma 5 ruchów? I jeżeli wykorzysta te ruchy to już nie może więcej chodzić po stronie, chyba, że nadejdzie kolejna godzina od daty ostatniego logowania?questionmark.gif

uzytkownik ma iles tam ruchów, o pelnej godzinie (nie od logowania, ale takiej na zegarku) dodaje mu sie kolejne 5 mozliwości klikniecia (5 ruchów), niezaleznie ile ma w tej chwili. Jeżeli wykorzysta wszystkie ruchy to nastepne dostanie o pelnej godzinie.
Czyli:
Wykorzysta ostatnia mozliwosc klikniecia o 6:54, a o 7:00 bedzie juz mogl wykonac 5 klikniec w strony...

No i pytanie jak polaczyc ten czas zegarowy z dodaniem wartosci w tabeli... Mam nadzieje, ze juz wiadomo o co mi chodzi.
Pomoze ktos? Jakieś pomysly?
gladiror
A naliczanie co godzine ma być również wtedy gdy użytkownik nie jest na stronie? Czy jak ma naliczać? Do czego w ogóle to jest potrzebne? winksmiley.jpg
Pigula
pobierasz z bazy ilosc ruchow ktore zostaly uzytkownikowi do wykorzystania. dodajesz 5 ruchow i zapisujesz spowrotem do bazy. najlepiej zrob w petli zeby wczytywalo kolejnych uzytkownikow. a zeby skrypt sie wykonywal co godzine musisz wrzucic go do cron'a.
Radarek
Do wykonania tego nie jest potrzebny zaden cron.

Uzytkonik ma zapisane w bazie ile ma zetonow (pkt jak kto woli). Logujac sie pobierane sa te dane i zapisywane w zmiennej sesyjnej. Kazde wywolanie podstrony powoduje wykonanie nastepujacego algorytmu:

-pobranie aktualnej liczby zetonow N
-pobranie czasu ostatniego klikniecia T1
-pobranie aktualnego czasu T2
-obliczenie ile pelnych godzin bylo mieczy czasem T2 a T1 (czyli jesli T1=16:49, a T2=17:01 to byla jedna pelna godzina 17:00) K (trzeba wziac tez pod uwage daty, bo user mogl nie zagladac na stronke od kilku dni)
-wyznaczenie ilosci nowych rzetonow dla danego usera poprzez wzor N = N + K * jakas_stala (charakterystyczna dla danego usera, albo dla wszystkich taka sama)

W ten sposob nie trzeba uzywac crona (dla duzej licznby uzytkownikow niepotrzebnie uaktualniane sa dane w bazie, takze dla tych ktorzy np od tygodnia nie zagladali na stronke).

To tak ogolem, mysle ze da sie to wykonac - mam nadzieje ze nie pospieszylem sie za bardzo smile.gif.
stokrotka
Dżisys... ja juz widze siebie jak pisze taki skrypt... sad.gif sadsmiley02.gif
Widać nie dla psa kielbasa... tzn nie dla 100krotki skrypt sadsmiley02.gif
Bartech
Podpowiedź mojego poprzednika ("dr_bonzo") jest słuszna.

Skrypt który miałby sprawdzać czy minęła już godzina, może działać następująco:

- zapisujesz godzinę zalogowania
- po każdym kliknięciu sprawdź ile minęło sekund od zalogowania
- jeżeli ilość sekund jest większa niż 3600 to licznik_kliknięć + 5
- jeżeli ilość sekund mniejsza od 3600 to nic nie rób

przy zalogowaniu
zapisywanie czasu wyglądało by to mniej więcej tak:
  1. <?php
  2.  
  3. //użycie unixowego czasu, liczonego w sekundach
  4. $login_at = date("U"));
  5. //tu zapsz $login_at do sesji lub do bazy lub gdzie wolisz
  6.  
  7. ?>


po ponownym kliknięciu
odczytaj czas z sesji do zmiennej $login_at
  1. <?php
  2.  
  3. //porównanie czasu
  4. if($login_at + 3600 > date("U")): $ilosc_klikniec + 5; endif;
  5.  
  6. ?>



Problem został jednak rozpatrony w prymitywny sposób, ponieważ takie rozwiązanie pozwala Tobie na powiększanie konta kliknięć tylko wówczas kiedy użytkownik jest zalogowany i do tego zalogowany przez conajmniej jedną pełną godzinę, jeżeli włączysz wygasanie sesji na mniej niż godzinę albo użytkownik się wyloguje wcześniej to straci czas który już minął.

Gdybyś chciał żeby kliknięcia naliczane były non stop nie zależnie czy użytkownik jest zalogowany czy nie, to musisz przyjąć inną strategię!!! Wyglądałoby to tak:

w bazie danych z użytkownikami wprowadź kolumny: data założenia konta (actv_date), ilość wykożystyanych kliknięć (il_wyk_klik).

Mając takie informacje, mógłbyś:

- każde kliknięcie musi powiększać o jedność ilość wykożystanych kliknięć
- odjąć od aktualnej daty (w sekundach UNIX) datę zalogowania i podzielić ją przez 3600
- uzyskaną w ten sposób liczbę godzin w systemie mnożysz razy Twoją godzinową stawkę kliknięć i masz limit klikania
- następnie sprawdzasz czy liczba kliknięć nie jest większ od obliczonej liczby dozwolonych kliknięć i masz rozwiązanie:

  1. <?php
  2.  
  3. $il_wyk_klik++; // to powiększa o jeden
  4. //zapisz do kolumny "il_wyk_klik"
  5. //aktualna data
  6. $act_date = date("U");
  7. //pobież datę aktywacji konta, później
  8. $minus_date = $act_date - $actv_date;
  9. $max_klik = $minus_date/3600;
  10. if($max_klik > $il_wyk_klik):
  11. //warunek spełniony można klikać dalej!!!
  12.  
  13. else:
  14. echo "wyczerpałeś limit kliknięć";
  15. endif;
  16.  
  17. ?>


Oczywiście skrypty są poglądowe i nie testowane, pozatym brakuje tam sesji czy bazy MySQL, ale warto się z tym pobawić.
dr_bonzo
A ja myslalem o czyms prostszym:
cron: co godzine wlaczasz skrypt ktory robi tylko:
  1. UPDATE tabela SET klikniecia = klikniecia + 5

A jak nie masz crona to zapisujesz w pliku czas ostatniego dodawania klikniec, przy kazdym otwarciu strony sprawdzasz czy minelo 5 godzin, jesli tak to uaktualniasz czas i wykonujesz skrypt z powyzszym SQLem.
Bartech
Wydaje mi się że naszemu założycielowi tematu nie chodzi o dodawanie kliknięć w nieskończoność, tylko o czyste ograniczenie ilości kliknięć na godzinę, bez sumowania ich na zapas, skrypcik podwieszę za 20 minut jak go zrobię smile.gif

OTO SKRYPT:

  1. <?php
  2.  
  3. //pobieranie aktualnej daty UNIXOWEJ i powiększanie o godzinę
  4. $act_date = date("U") + 3600;
  5. if($tabela[login_date] < $act_date):
  6. if($tabela[hour_limit] > 0):
  7. //ok godzina nie minęła a klknięć jeszcze zostało więc działamy...
  8.  //TREŚĆ STRONY...
  9.  else:
  10.  //klinięć już nie ma...
  11.  echo"klikniecia na tę godzinę wykożystane..."
  12.  endif;
  13. else:
  14. //minęła godzina od logowania...
  15. mysql_query("UPDATE tabela SET hour_limit = hour_limit - 1");
  16. //nie jestem pewnien czy to poprawne zapytanie i czy nie trzeba podać nowego pozio
    my licznika kliknięć poprzez zmienną...
  17. endif;
  18.  
  19. ?>


Istnieje jednak zagrożenie że użytkownik, po dokonaniu wylogowani i ponownego zalogowania znów będzie miał domyślne 5 kliknięć, trzebaby to również zabezpieczyć, jak naprzykład sprawdzając przy logowaniu, kiedy nastąpiło ostatnie logowanie, jeżeli nie minęła jeszcze godzina to nie nadpisywać login_date i pozostawić hour_limit... CO POZWOLI NA KONTYNUOWANIE poprzedniego stanu licznika i nie wydłuży oczekiwania na nastepne kliknięcia.
dr_bonzo
Patrz:
Cytat
uzytkownik ma iles tam ruchów, o pelnej godzinie (nie od logowania, ale takiej na zegarku) dodaje mu sie kolejne 5 mozliwości klikniecia (5 ruchów), niezaleznie ile ma w tej chwili. Jeżeli wykorzysta wszystkie ruchy to nastepne dostanie o pelnej godzinie.


Cytat
Raczej nie godzine po wejsciu, a o pelnej godzinie ruch +5
Gość_stokrotka
Raczej chodzilo mi o to, co napisal dr bonzo, aczkolwiek Bartech dziekuje tobie bardzo - może twoje rozwiazanie bedzie bardziej uzyteczne w praktyce dnia codziennego.

----edit----
Stokroteczko kochana winksmiley.jpg nie to że sie czepiam albo jakieś wykroczenie popełniasz, ale ...
Loguj się skoro juz się zarejestrowałaś.
~mike_mech
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.