Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Sposób sprawdzania ip głosujących
samuello
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 30.11.2011

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


Posiadam system głosowania i chcę dorobić do niego blokowanie możliwości wielokrotnego głosowania. Planuję wykorzystać do tego metodę sprawdzania ip osoby głosującej. Potrzeba do tego bazy z adresami ip, które już na dany element oddały głos.

Pytanie moje brzmi: w jaki sposób gromadzić adresy ip osób, które oddały głos?
  1. Czy zapisywać je do bazy danych, do tabeli która będzie składać się z dwóch kolumn: id elementu i ip? i każdy numer ip to nowy wiersz?
  2. Czy zapisywać je do tabeli w bazie danych z kolumnami jak wyżej, jednakże w taki sposób, że jeden wiersz będzie zawierał id i w polu ip wszystkie ip, które oddały głos na element o danym 'id'? Potem wykorzystać funkcję explode do porównania z aktualnie oddającym głos...
  3. Czy może zapisywać adresy ip do pliku? Jedna linijka to adres ip + id elementu.


Zastanawiam się czy sposób nr 1, przy założeniu 10 000 elementów na które można głosować i 10 000 użytkowników oddających głos na każdy z nich, nie będzie zbyt obciążający skrypt? Przy opisanym założeniu powstanie 10 000 000 wierszy w tabeli z adresami ip... A jeżeli jeszcze bardziej zwiększy się liczba elementów i głosujących? (generalnie ciekawy jestem czy jest jakieś praktyczne ograniczenie ilości wierszy i kolumn w tabeli bazy danych?)

W sposobie nr 2, może się okazać, że braknie miejsca na dopisywanie kolejnych adresów ip... gdyż z tego co się orientuję pola typu text czy nawet longtext ma jakieś ograniczenia ilości bajtów:>

W przypadku sposobu nr 3 też obawiam się o szybkość wykonywania skryptu...

Co Wy na to? Proszę o podpowiedzi i rady w poruszonej kwestii. A może ktoś widzi jakieś inne rozwiązanie problemu blokowania wielokrotnego głosowania? Może warto dodać jeszcze sprawdzanie cookies.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
rocktech.pl
post
Post #2





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Witam.

Sposób pierwszy zdecydowanie 2 i 3 to porażka.

Zobacz także jak wydajniej przechowywać adresy IP w bazie jako INT.

  1. SELECT INET_ATON('192.168.0.10') AS ipn;
  2. SELECT INET_NTOA(3232235530) AS ipa;


A w php ip2long.

Ten post edytował rocktech.pl 7.01.2012, 12:33:48
Go to the top of the page
+Quote Post
samuello
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 30.11.2011

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


Korzystając z tematu chciałbym jeszcze zapytać o jakieś polecane artykuły na temat optymalizacji działania bazy danych. Chciałbym się dowiedzieć jak kształtować budowę mojej bazy danych z punktu widzenia szybkości działania serwisu. Kiedy i czy w ogóle tworzyć więcej niż jedną bazę, czy są jakieś ograniczenia praktyczne co do ilości tabel w bazie danych, czy kolejność i ilość kolumn w tabeli ma jakieś znaczenie?
Go to the top of the page
+Quote Post
Rysh
post
Post #4





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Jeśli w Twoim skrypcie można głosować raz na 24h, proponuje dodać do tabeli dodatkową kolumnę timestamp i przy pomocy zapytania sprawdzać czy IP znajduje się w bazie w ostatnich 24h. Jeśli dobrze kminie, wypadało by dodać również indeks na timestamp dla szybszego operowania na bazie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 05:48