Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> limit ruchu po stronie, dla danego uzytkownika
-stokrotka-
post 23.09.2005, 11:41:20
Post #1





Goście







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
Go to the top of the page
+Quote Post
dr_bonzo
post 23.09.2005, 11:48:25
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Pigula
post 23.09.2005, 12:25:23
Post #3





Grupa: Zarejestrowani
Postów: 446
Pomógł: 0
Dołączył: 5.03.2005
Skąd: Lublin

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


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
Go to the top of the page
+Quote Post
-stokrotka-
post 23.09.2005, 12:25:56
Post #4





Goście







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.
Go to the top of the page
+Quote Post
gladiror
post 23.09.2005, 12:43:05
Post #5





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


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??


--------------------
"Państwo to ja" Ludwik XIV
"Wróg zaatakuje to co kochasz" Ojciec Chrzestny
"Wszystko powinno być proste jak to tylko możliwe, ale nie prostsze..." A. Einstein
"Wyobraźnia jest ważniejsza niż wiedza" Albert Einstein
"Nieprawda powtarzana wielokrotnie staje się prawdą"
Go to the top of the page
+Quote Post
stokrotka
post 23.09.2005, 12:48:58
Post #6





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 23.09.2005

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


Raczej nie godzine po wejsciu, a o pelnej godzinie ruch +5
Go to the top of the page
+Quote Post
gladiror
post 23.09.2005, 12:53:51
Post #7





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


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


--------------------
"Państwo to ja" Ludwik XIV
"Wróg zaatakuje to co kochasz" Ojciec Chrzestny
"Wszystko powinno być proste jak to tylko możliwe, ale nie prostsze..." A. Einstein
"Wyobraźnia jest ważniejsza niż wiedza" Albert Einstein
"Nieprawda powtarzana wielokrotnie staje się prawdą"
Go to the top of the page
+Quote Post
stokrotka
post 23.09.2005, 13:02:21
Post #8





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 23.09.2005

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


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?
Go to the top of the page
+Quote Post
gladiror
post 23.09.2005, 13:11:39
Post #9





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


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


--------------------
"Państwo to ja" Ludwik XIV
"Wróg zaatakuje to co kochasz" Ojciec Chrzestny
"Wszystko powinno być proste jak to tylko możliwe, ale nie prostsze..." A. Einstein
"Wyobraźnia jest ważniejsza niż wiedza" Albert Einstein
"Nieprawda powtarzana wielokrotnie staje się prawdą"
Go to the top of the page
+Quote Post
Pigula
post 23.09.2005, 13:33:48
Post #10





Grupa: Zarejestrowani
Postów: 446
Pomógł: 0
Dołączył: 5.03.2005
Skąd: Lublin

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


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.

Ten post edytował Pigula 23.09.2005, 13:34:13
Go to the top of the page
+Quote Post
Radarek
post 23.09.2005, 13:53:52
Post #11





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 23.05.2005

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


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.

Ten post edytował Radarek 23.09.2005, 13:55:12
Go to the top of the page
+Quote Post
stokrotka
post 23.09.2005, 14:48:09
Post #12





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 23.09.2005

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


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
Go to the top of the page
+Quote Post
Bartech
post 23.09.2005, 14:57:21
Post #13





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 29.08.2003
Skąd: Poznań

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


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


--------------------
www.szymaszkiewicz.com
Go to the top of the page
+Quote Post
dr_bonzo
post 23.09.2005, 15:05:00
Post #14





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Bartech
post 23.09.2005, 15:06:48
Post #15





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 29.08.2003
Skąd: Poznań

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


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.

Ten post edytował Bartech 23.09.2005, 15:24:28


--------------------
www.szymaszkiewicz.com
Go to the top of the page
+Quote Post
dr_bonzo
post 23.09.2005, 15:23:35
Post #16





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
-Gość_stokrotka-
post 23.09.2005, 18:35:51
Post #17





Goście







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
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: 6.07.2025 - 04:28