![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 19.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Od pewnego czasu pracuje nad licznikiem odwiedzin opartym o MySQL. Licznik napisałem bez problemów jednak zachciało mi się dodać do niego możliwość odfiltrowywania niechcianych adresów IP (chodzi tu głównie o boty google) jednak nie chciałem usuwać ich z bazy danych dając użytkownikowi wybór czy chce by wyniki działa licznika był filtrowany czy nie. Filtrowanie oparłem o plik tekstowy który zawiera niechciane adresy IP. Zasada działa filtra jest taka: - wczytuje niechciane adresy IP z pliku - wczytuje w petli kolejne adresy IP z bazy danych które zliczam - adresy z bazy danych porównuje w funkcji z niechcianymi adresami IP - w zależności od bool'owskiej wartości jaka zwraca funkcja doliczam lub nie dany adres. Tak to wygląda w praniu:
Niżej:
echa'a w funkcji dodałem w celach testowych... I tak dla tylko jednego adresu IP w pliku filtr.cfg Mamy takie wyniki: 66 217| 249 76| 71 115| 199 146| <1> 66 66| <2> 249 249| <3> 71 71| 199 202| 66 80| 249 48| 71 178| 199 2| <1> 66 66| <2> 249 249| <3> 71 71| 199 101| .... <1> 66 66| <2> 249 249| <3> 71 71| 199 199| <1> 66 66| <2> 249 249| 71 66| 199 90| ... Tu tkwi problem... przy ostatniej iteracji pętli warunek jak by nie był sprawdzany... testowałem to dla odwróconej kolejności wynik był taki: <1> 199 199| <2> 71 71| <3> 249 249| 66 66| Nie potrafię tego wyjaśnić ani zrozumieć czemu się tak dzieje... P.S Jestem świadom że funkcja nie jest jeszcze optymalnie napisana bo np. pętla działa nadal nawet jeśli pierwsza części adresu IP się nie zgadza. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Zamień sobie ip na liczby ip2long
Pomysł dla unikalnych odwiedzin, sprawdzasz warunek jeżeli się zgadza to odejmujesz tablicę od tablicy array_diff i potem count w przeciwnym wypadku wystarczy count. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 19.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuje funkcja idealna do mojego celu i znacznie powinna uprości kod.
Co do unikalnych odwiedzin to nie podany przez mnie licznik dba o to by nie zapisywać do bazy danych adresów IP które już w niej się znajdują a jedynie dodaje kolejna wizytę. Edit: Niestety coś dalej nie śmiga... =/ Znów nie wiem co jest grane....
Otrzymujemy: 217.76.115.146-!3645666194 66.249.71.199 - 66.249.66.90 - 66.249.66.170 - 66.249.66.102 - 66.249.66.97 - 66.249.66.163 - .... Prosił bym też na odpowiedz czemu mój poprzedni kod nie działał bo wolał bym w przyszłości nie przerabiać podobnego błędy ponownie... Up... Ten post edytował mastergos 19.07.2010, 19:32:06 |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Nie wiem jak wygląda sprawa z Twoimi wpisami w tablicy licznik. Czy "wizyt" to od razu suma wizyt tego ip na stronie czy nie? Jeśli tak, zero problemu.
1. Sprawdzić czy filtr włączony. 2. Jeśli nie - sumujemy liczby z kolumny "wizyt" 3. Jeśli tak - w zapytaniu dodajemy warunek w zapytaniu: WHERE ip NOT IN ( $string_z_niechcianymi_IP_ujętymi_w_apostrofy_i_oddzielone_przecinkami ) i też sumujemy kolumne "wizyt" (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 19.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Tak wizyty to ilość wejść danego IP na moja stronę... Licznik sprawdza czy dany IP jest już w bazie jeśli TAK: to zwiększa wartość pola wizyt o 1 jeśli NIE to dodaje IP do bazy.
Dziękuje za kolejną sugestie jednak jak nadal czekam na podpowiedz gdzie leży błąd w poprzednich wersjach funkcji filtr. Gdyż jak już pisałem wcześniej wole się uczyć na błędach i nie powtarzać ich w przyszłości. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 07:39 |