Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Sprawdzenie czy upłyneły 24h
Forum PHP.pl > Forum > Przedszkole
kalafior122
Witam. Mam problem muszę zaliczać tylko co 24h klinięcie w link.. zaraz opisze na przykładzie haha.gif
User xinski ma konto na stronie y i dostaje link do programu polecen np. y.pl/pp.ph?u=xinski i rozsyła ten link do znajomych i oni klikają oddjae mu punkty do tej pory wiem jak zrobić tylko nie wiem jak zrobić aby znajomi mogli kliknąć w ten link tylko raz na 24h (tz mogą klikać kilka razy ale zalicza tylko jeden raz na 24h). Myślę że dobrze opisłem o co mi chodzi... a 2 to jak zabezpieczyć to przed proxy i zmiennym ip
Spawnm
Dodajesz pole datatime do db i porównujesz z obecną datą.
Ew. cookies, ale to bardzo łatwo obejść.
kalafior122
Cytat(Spawnm @ 6.03.2013, 21:41:27 ) *
Dodajesz pole datatime do db i porównujesz z obecną datą.
Ew. cookies, ale to bardzo łatwo obejść.

też tak myślałem tylko gorzej to napisać.... :/ nie znam sie za bardzo na datach w mysql/php
Ruch Radzionków
proste dodajesz nowa baze np. daty
i dodajesz tam:

ip
host
data

i następnie gdy osowa kliknie to przy wykorzystaniu date() odczytujesz czy osoba klikła jak tak to nie dodajesz punktów
kalafior122
chwila ale jak to porównaćquestionmark.gif
Damonsson
Było na forum milion razy, sam już chyba na 2 takie tematy odpisywałem. Użyj wyszukiwarki gwarantuję, że znajdziesz gotowe odpowiedzi.
kalafior122
tak w sumie wszystko wiem jak zrobić chodzi mi tylko o to jak sprawdić czy upłyneły 24h. Pobieramy czas z bazy (podczas dodania rekordu) i sprawdzamy z akualną(chyba daty też terzba porównać tylko nw jak).W teorii wiem jak to zrobić gorzej z praktyką...
a co do wyszukiwarki nie mogę nic znaleźć
_Borys_
Funkcja MYSQL DATEDIFF() albo TIMEDIFF()
Jako drugi argument podajesz NOW() w przypadku TIMEDIFF()
MySQL: operacje na datach i czasie
kalafior122
wymyśliłem coś wcześniej smile.gif zapomniałem napisać teraz mam problem z tym jak zabezpieczyć ten system przed proxy i zmiennym IP
_Borys_
Dodawaj do linku jakiś unikalny identyfikator, i każdy taki link może być kliknięty tylko raz, sprawdzasz w bazie czy ten link był kliknięty a jeśli tak to nie dodajesz już punktów.
kalafior122
własnie to ma kliknąć jak najwięcej osób... bo jest to skrypcik na konkurs i kto zdobędzie najwięcej poleceń(kliknięć) ten wygrywa. I chodzi o to żeby ktoś sb poprostu proxy nie zmieniał albo jak ma znienne ip żeby sobie poprostu sam nie klikał
kallosz
Najprościej przy zmiennym IP stosować cookie.
Chyba nie ma złotej metody na zabezpieczenie przed proxy.
Dodatkowo możesz też sprawdzać user-agenta i sprawdzać czas klików na poszczególne ID czy ktoś nie robi tego zbyt często co mogło by sugerować obchodzenie przez proxy.
_Borys_
Dla każdego wejścia na stronę generujesz link z unikalnym identyfikatorem, ten link który mają klikać, identyfikator przechowujesz w bazie, każdy użytkownik ma więc inny link, jeśli kliknie dodajesz punkty i kasujesz identyfikator z bazy.
Można też na cookie to zrobić jeśli jest unikalne ale trzeba by sprawdzać tak samo w bazie czy już było kliknięte a potem kasować z bazy.
Damonsson
evercookie + zapisywanie wszystkiego co identyfikuje użytkownika. No, ale to już jakiś człowiek musiałby przeanalizować logi.
kalafior122
Cytat(_Borys_ @ 7.03.2013, 18:14:09 ) *
Dla każdego wejścia na stronę generujesz link z unikalnym identyfikatorem, ten link który mają klikać, identyfikator przechowujesz w bazie, każdy użytkownik ma więc inny link, jeśli kliknie dodajesz punkty i kasujesz identyfikator z bazy.
Można też na cookie to zrobić jeśli jest unikalne ale trzeba by sprawdzać tak samo w bazie czy już było kliknięte a potem kasować cookie u użytkownika.

nie rozumiem dlaczego usuwam id z bazy? user zapisuje sie do konkursu dostaje link y.pl?pp.php?u=nazwa_useraLUBid i każdy z jego pomocników klika cąły czas ten sam link
_Borys_
Właśnie że to ma być ten sam link tylko dodany unikalny jednorazowy identyfikator, każdy kto się zaloguje będzie miał inny identyfikator i tylko raz będzie mógł kliknąć. Nie da się tego zrobić bez logowania bo można łatwo ominąć.
W poprzednim poście napisałem, że po każdym wejściu na stronę, cofam, tamto nie zadziała, użytkownik musi się zalogować.
Damonsson
Jak nie dasz do wygrania Mercedesa to nikt się nie zarejestruje, nie łudź się wink.gif
kalafior122
Cytat(_Borys_ @ 7.03.2013, 18:30:14 ) *
Właśnie że to ma być ten sam link tylko dodany unikalny jednorazowy identyfikator, każdy kto się zaloguje będzie miał inny identyfikator i tylko raz będzie mógł kliknąć. Nie da się tego zrobić bez logowania bo można łatwo ominąć.
W poprzednim poście napisałem, że po każdym wejściu na stronę, cofam, tamto nie zadziała, użytkownik musi się zalogować.

a ja potrzebuje bez logowania z logowaniem bym nie miał tego problemu...
a adres mac da rade pobrać bez lan?
Ruch Radzionków
zrób tak utwórz baze o nazwie np. test i do niej dodaj
user varchar(222)
ip varchar(222)
host varchar(222)
data datetime

i gdy osoba kliknie w dany link no to zrób coś takiego
  1. $link = $_GET[u];
  2. if(isset($link))
  3. {
  4. $user = mysql_query("SELECT * FROM users WHERE login='$link'");
  5. $user = mysql_num_rows($user);
  6. if($user == 0)
  7. {
  8. // nie ma takiego uzytkownika
  9. }
  10. else
  11. {
  12. $ip = $_SERVER["REMOTE_ADDR"];
  13. $host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  14. $pobierzztest = mysql_query("SELECT * FROM test WHERE ip='$ip' AND host='$host' AND user='$link'");
  15. $pobierzztest= mysql_num_rows($pobierzztest);
  16. if($pobierzztest == 0)
  17. {
  18. //możesz dodac punkt i dodaj do bazy ze zostal oddany
  19. }
  20. else
  21. {
  22. $pobierzztest = mysql_fetch_array(mysql_query("SELECT * FROM test WHERE ip='$ip' AND host='$host' AND user='$link'"));
  23. $terazczas = time();
  24. $ostatniadata = date("Y-t-j", $pobierzztest[data]);
  25. $teraz = date("Y-t-j", $terazczas);
  26. if($ostatniadata == $teraz)
  27. {
  28. //już oddal dzisiaj glos
  29. }
  30. else
  31. {
  32. //możesz dodac punkt i dodaj do bazy ze zostal oddany
  33. }
  34. }
  35. }
  36. }
kalafior122
własnie takie coś zrobiłem tylko nie wiem jak zabezpieczyć przed zmiannym ip ew proxy
markonix
Tabela powinna się składać z 3 pól.
W założeniu będzie miała duże obciążenie więc trzeba ją dobrze zaprojektować.

username (najlepiej id) | ip (w postaci numerycznej) | data

username + ip klucz UNIKALNY.

Sprawdzasz czy minęły 24h od kliknięcia, możesz to zrobić za pomocą strtotime "-1 day" lub jeśli datę w unix trzymiesz to odejmujesz od niej 86400.
Jeśli powyższe jest tak (czyli rekordu nie ma, bądź rekord jest ale nie minęły 24h) to robisz:
http://dev.mysql.com/doc/refman/5.0/en/ins...-duplicate.html
czyli dodajesz rekord bądź jeśli już ten user i te ip jest to aktualizujesz datę - wszystko w jednym zapytaniu.

Przypominam o SQL Injection, zwłaszcza przy pobieraniu nicku z linku.

Co do proxy Google:
"php proxy prevent"

Jest kilka kulawych rozwiązań jak i rozwiązania biznesowe (bazy proxy i dostęp z API), które są często płatne.
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.