Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Budowa zapytania do bazy
Forum PHP.pl > Forum > Przedszkole
bubusek
Witam serdecznie problem jak na przedszkole pewnie banalny.

Sprawdzam IP odwiedzającego stronę:
  1. <?php
  2. function IP_prawdziwe(){
  3.  
  4. if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
  5. $ip_prawdziwe = $_SERVER['HTTP_X_FORWARDED_FOR'];
  6. }
  7. else {
  8. $ip_prawdziwe = $_SERVER['REMOTE_ADDR'];
  9. }
  10.  
  11. return $ip_prawdziwe;
  12. }
  13.  
  14. $ip = IP_prawdziwe();
  15. ?>


W bazie danych natomiast mam tabele z przedziałami IP przypisanymi do danego kraju.
przykładowo:
  1. ipfrom ipto country
  2. 121195296 121195327 ITALY
  3. 184549376 201674095 UNITED STATES


Pierwszy problem dla mnie to to iż pobrany wynik $ip przedstawia się w formię np 88.153.245.185 a nie ciągu liczb jak w bazie bez kropek.
Drugi to w jaki sposób stworzyć zapytanie do bazy danych by sprawdzało z jakiego przedziału jest IP odwiedzającego stronę i zwracało wynik z nazwą tego kraju

krispak
Oczyszczasz IP z kropek poprzez str_replace w funkcji lub poza nia i dajesz zapytanie do bazy
  1. $ip = str_replace('.', '', IP_prawdziwe());
  2. mysql_query("SELECT * FROM tabelaIp WHERE ipfrom <= '".$ip."' AND ipto >= '".$ip."'");
bubusek
Hmm to w takim razie jednak te przedziały IP w bazie są jakoś zmodyfikowane bo największy przedział jaki mam to;
3732930560 373397913 CHINA

więc 9 cyfrowe więc przykładowe IP 88.153.245.185 po usunięciu kropek będzie 11 cyfrowe i nie znajdzie swego przedziału...
krispak
W takim badz razie adresy sa przekonwertowane funkcja ip2long, czyli bedzie tak:
  1. $ip = sprintf("%u", ip2long(IP_prawdziwe()));
  2. mysql_query("SELECT * FROM tabelaIp WHERE ipfrom <= '".$ip."' AND ipto >= '".$ip."' LIMIT 1");
bubusek
Ślicznie dziękuje za pomoc.
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.