login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Handige scripts > IP to Country

IP to Country

Auteur: twopeak - 21 november 2004 - 23:48 - Gekeurd door: Dennisvb - Hits: 8155 - Aantal punten: 4.33 (6 stemmen)




Dit scriptje laat je toe te bepalen uit welk land een gebruiker komt.

Run volgende query om de tabel te maken:

CREATE TABLE ip2country (
start_ip varchar(15) NOT NULL default '',
end_ip varchar(15) NOT NULL default '',
start_number int(11) NOT NULL default '0',
end_number int(11) NOT NULL default '0',
countrycode char(2) NOT NULL default '',
country varchar(50) NOT NULL default ''
) TYPE=MyISAM;

Dan moet je die db vullen met de ip's en de landen.
Je kunt dergelijke databases kopen op internet (zoek maar met google "ip2country")
Ik heb een db gevonden die gratis is. Maandelijks kan je op dit adres een nieuw cvs bestand halen met de laatste data! (dit vervangt dan alle vorige data van je db)
www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
(aangezien hij gratis is, is hij ook niet 100% juist of volledig)

Mijn methode om al die info in mijn db te steken is dit:
Je unzipt het bestand, en met je favoriete text-editor en wat search-n-replace creativiteit maak je van elke aparte lijn php + sql commando.
En daarvoor connecteer je naar je database en open je je database.
Dit kun je dan uitvoeren en elke lijn wordt in je tabel gestopt.

Als je nog vlaggetjes van alle landen wilt, kun je naar
sourceforge.net/projects/flags/
surfen en ze daar downloaden.

Roep het script aan met als get variabele $ip = <<je ip adres>>

Code:
  1. <?
  2. $ip_adres = $_GET['ip'];
  3. // -- ip checken ---------------------
  4. if (!ereg ("([0-9]{1,3}\.){3}([0-9]){1,3}", $ip_adres))
  5. {
  6. //eigen foutafhandler
  7. die("IP adres is geen adres!");
  8. }
  9.  
  10. $conn = @mysql_connect("localhost", "root", "1234");
  11. $db = @mysql_select_db("private") ;
  12. if (!$conn || !$db)
  13. {
  14. //eigen foutafhandeler
  15. die("er was een fout met het openen van de connectie of het selecteren van db<br>");
  16. }
  17.  
  18. // -- bereken ipnummer -------------------
  19. $ip_arree = explode( ".", $ip_adres );
  20. $ipnr = $ip_arree[0]*16777216 + $ip_arree[1]*65536 + $ip_arree[2]*256 + $ip_arree[3];
  21. // -- ff ipnr checken --------------------
  22. if (!is_numeric($ipnr))
  23. {
  24. //eigen foutafhandeler
  25. die("er was een fout met het opgegeven ip adres!");
  26. }
  27.  
  28. // -- selecteer landcode -------------------
  29. $queryzin = "SELECT countrycode FROM ip2country WHERE '".$ipnr."' BETWEEN start_number AND end_number";
  30.  
  31. $landcode_object = mysqlquery($queryzin);
  32.  
  33. $landcode = mysqlresult( $landcode_object , 0 , "countrycode" );
  34.  
  35. echo "U komt uit het land met landcode ".$landcode;
  36. echo "<br><img src=\"flags/".strtolower($landcode).".gif\">";
  37. //
  38. //_________________________________________________________________________________________
  39. //gebruik hier best je eigen mysql class. Deze functietjes bootsen het normale na maar geven wat beter fouten terug (imho)
  40. //ze werken op exact dezelfde manier als de "echte" functies, zonder de underscore, dus ze kunnen ook snel weggedaan worden
  41. function mysqlquery($query)
  42. {
  43. $res = @mysql_query($query);
  44. if (!$res)
  45. {
  46. //eigen foutafhandler
  47. die("<h3> er was een <b>fout</b><hr>Fout:<br><br>".mysql_error()."<hr><br> De query was: <br>".$query);
  48. }
  49.  
  50. return $res;
  51. }
  52. function mysqlresult($object, $rij, $veld)
  53. {
  54. //check of er iets in de queryobject zit op die rij voor die tabel
  55. if (!$aantal_rijen = @mysql_num_rows($object)) // return false?
  56. {
  57. //eigen foutafhandler
  58. die("<h3> er was een fout</h3><br> Er waren geen resultaten bij deze query<br><hr>".mysql_error());
  59. }
  60.  
  61. if ($aantal_rijen < $rij || $aantal_rijen < 1) //geen resultaten of minder dan wat er opgevraagd zou worden
  62. {
  63. //eigen foutafhandler
  64. die("<h3> er was een fout</h3><br> Er waren minder rijen dan verwacht!");
  65. }
  66. //retourneer het zootje
  67. return mysql_result($object, $rij, $veld);
  68. }
  69.  
  70.  
  71. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Geen reacties (0)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.023s