kalafior122
6.03.2013, 21:35:37
Witam. Mam problem muszę zaliczać tylko co 24h klinięcie w link.. zaraz opisze na przykładzie

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
6.03.2013, 21:41:27
Dodajesz pole datatime do db i porównujesz z obecną datą.
Ew. cookies, ale to bardzo łatwo obejść.
kalafior122
6.03.2013, 21:42:56
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
6.03.2013, 21:44:47
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
6.03.2013, 21:49:59
chwila ale jak to porównać
Damonsson
6.03.2013, 23:35:25
Było na forum milion razy, sam już chyba na 2 takie tematy odpisywałem. Użyj wyszukiwarki gwarantuję, że znajdziesz gotowe odpowiedzi.
kalafior122
7.03.2013, 16:15:49
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_
7.03.2013, 17:23:55
Funkcja MYSQL DATEDIFF() albo TIMEDIFF()
Jako drugi argument podajesz NOW() w przypadku TIMEDIFF()
MySQL: operacje na datach i czasie
kalafior122
7.03.2013, 17:26:32
wymyśliłem coś wcześniej

zapomniałem napisać teraz mam problem z tym jak zabezpieczyć ten system przed proxy i zmiennym IP
_Borys_
7.03.2013, 17:36:23
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
7.03.2013, 17:43:06
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
7.03.2013, 18:06:04
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_
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ć z bazy.
Damonsson
7.03.2013, 18:17:18
evercookie + zapisywanie wszystkiego co identyfikuje użytkownika. No, ale to już jakiś człowiek musiałby przeanalizować logi.
kalafior122
7.03.2013, 18:18:37
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_
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ć.
Damonsson
7.03.2013, 18:33:02
Jak nie dasz do wygrania Mercedesa to nikt się nie zarejestruje, nie łudź się
kalafior122
7.03.2013, 18:38:21
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
7.03.2013, 19:02:39
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
$link = $_GET[u];
{
$user = mysql_query("SELECT * FROM users WHERE login='$link'"); if($user == 0)
{
// nie ma takiego uzytkownika
}
else
{
$ip = $_SERVER["REMOTE_ADDR"];
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$pobierzztest = mysql_query("SELECT * FROM test WHERE ip='$ip' AND host='$host' AND user='$link'"); if($pobierzztest == 0)
{
//możesz dodac punkt i dodaj do bazy ze zostal oddany
}
else
{
$ostatniadata = date("Y-t-j", $pobierzztest[data
]); $teraz = date("Y-t-j", $terazczas); if($ostatniadata == $teraz)
{
//już oddal dzisiaj glos
}
else
{
//możesz dodac punkt i dodaj do bazy ze zostal oddany
}
}
}
}
kalafior122
7.03.2013, 20:10:08
własnie takie coś zrobiłem tylko nie wiem jak zabezpieczyć przed zmiannym ip ew proxy
markonix
8.03.2013, 10:13:05
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.htmlczyli 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.