Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zakresy adresów ip
Forum PHP.pl > Forum > Przedszkole
marian84
Mam bazę danych adresów IP dla Polski.

Jej struktura wygląda następująco:

ip_start | ip_end | misto | powiat | wojewodztwo

1309205504 | 1309206527 | Warszawa | Warszawa | Mazowieckie

Jaksprawdzić czy dany adres ip odwiedzającego stronę zawiera się w któryms z przedziałów?
wookieb
id_start > ip and id_end < id

questionmark.gif?
marian84
Cytat(wookieb @ 31.05.2010, 08:45:03 ) *
id_start > ip and id_end < id

questionmark.gif?


Niestety nie dziala w taki sposob.

podając swój adres ip zwraca mi wszystkie elementy bazy

  1. function IP_prawdziwe(){
  2.  
  3. if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
  4. $ip_prawdziwe = $_SERVER['HTTP_X_FORWARDED_FOR'];
  5. }
  6. else {
  7. $ip_prawdziwe = $_SERVER['REMOTE_ADDR'];
  8. }
  9.  
  10. return $ip_prawdziwe;
  11. }
  12.  
  13. $ip = IP_prawdziwe();
  14. echo ip2long($ip).'<br>';
  15. echo long2ip($ip).'<br>';
  16. echo $ip;
  17.  
  18. $sql=mysql_query('SELECT * FROM geo WHERE ipstart>="'.ip2long($ip).'" AND idend<"'.ip2long($ip).'"');
  19. while($row=mysql_fetch_assoc($sql))
  20. {
  21. echo $row['miasto'].', '.$row['woj'].'<br>';
  22. }
Fifi209
jak sam napisałeś masz pola:
ip_start i ip_end

w zapytaniu masz:
ipstart i idend

Nie dość że brak _ to jeszcze w drugim zamiast "p" masz "d"
marian84
ipstart | idend | miasto | powiat | woj - dokładne nazewnictwo wygląda tak
Fifi209
Porównuj liczby nie liczbę ze stringiem. (może to przez to?)

Swoją drogą masz co najmniej dziwne nazwy tych tabel.
marian84
  1. $sql=mysql_query('SELECT * FROM geo WHERE ipstart>"'.(int)ip2long($ip).'" AND idend<"'.(int)ip2long($ip).'"');
  2. while($row=mysql_fetch_assoc($sql))
  3. {
  4. echo $row['miasto'].', '.$row['woj'].'<br>';
  5. }


nic z tego - nie działa
phpion
Daj odwrotnie znaki większości/mniejszości. Zamiast > daj <=, a zamiast < daj >=.
Fifi209
Cytat(marian84 @ 31.05.2010, 09:36:27 ) *
nic z tego - nie działa


Nie zrobiłeś jak pisałem

Rzutowałeś na int...

  1. $sql=mysql_query('SELECT * FROM geo WHERE ipstart>"'.(int)ip2long($ip).'" AND idend<"'.(int)ip2long($ip).'"');


A ja mówiłem o zapytaniu:
  1. $sql=mysql_query('SELECT * FROM geo WHERE ipstart > '.ip2long($ip).' AND idend < '.ip2long($ip));
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.