Vous êtes sur la page 1sur 4

Show Visitor's Country Currency Using PHP and MYSQL

Hexasoft Development Sdn. Bhd. (645996-K)


1-2-15 Mayang Mall Complex,
Jalan Mayang Pasir 1,
11950 Bandar Bayan Baru,
Penang, Malaysia.
URL: http://www.ip2location.com

{ sales@ip2location.com }

The number of companies moved their business online is increasing. Selling products to
world wide is dealing with multi national customers and currencies. However, some
customers may have difficulty to convert the currency displayed to their origin currency.
It’s user friendly to show the pricing in a website in visitor origin currency. With the
origin currency, visitors can navigate faster and feel comfortable to make comparison.

In this tutorial, we use the IP2Location™ IP-Country database to lookup country of origin
from the visitor's IP address. Instead of loading the full database with 50000+ records,
we could simplify this tutorial with assumption only two different IP address ranges in
the world. IP addresses 0.0.0.0 - 126.255.255.255 originate from United States.
Meanwhile, IP addresses 127.0.0.0 - 255.255.255.255 originate from Japan. Here we
are creating a database "IP2Location" with table "IPCountry" that consists of two IP
address range records.
Step 1: Create and connect to 'IP2Location' database
mysql> CREATE DATABASE IP2Location
mysql> CONNECT IP2Location

Step 2: Create 'IPCountry' table


mysql> CREATE TABLE IPCountry
--> (
--> ipFROM DOUBLE NOT NULL,
--> ipTO DOUBLE NOT NULL,
--> countrySHORT VARCHAR(2) NOT NULL,
--> countryLONG VARCHAR(100) NOT NULL,
--> PRIMARY KEY(ipFROM, ipTO)
--> );

Step 3. Import the 'ipcountry.csv' database into table 'IPCountry'


mysql> INSERT INTO IPCountry VALUES (0, 2130706431,'US','UNITED STATES');
mysql> INSERT INTO IPCountry VALUES (2130706432,
4294967295,'JP','JAPAN');

The full version of IP-Country database is available for subscription at $49/year


from http://www.ip2location.com. If you have the full version of IP2Location™ IP-
Country database, the import process is easier by using the LOAD DATA feature available
in MYSQL.
PC:
mysql> LOAD DATA INFILE "/IPCountry.csv" INTO TABLE IPCountry FIELDS
TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

Linux/Unix:
mysql> LOAD DATA INFILE "/IPCountry.csv" INTO TABLE IPCountry FIELDS
TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';

Step 4: Create Countries table


mysql> CREATE TABLE Countries
--> (
--> TLD VARCHAR(2) NOT NULL,
--> Country VARHCAR(100) NOT NULL,
--> FIPS104 VARCHAR(2) NOT NULL,
--> ISO2 VARCHAR(2) NOT NULL,
--> ISO3 VARCHAR(3) NOT NULL,
--> ISONo INT NOT NULL,
--> Capital VARCHAR(100) NOT NULL,
--> Region VARCHAR(100) NOT NULL,
--> Currency VARCHAR(50) NOT NULL,
--> CurrencyCode VARCHAR(3) NOT NULL,
--> Population DOUBLE NOT NULL,
--> );
The country information is FREE
at http://www.ip2location.com/countryinformation.aspx. It consists of top level
domain (TLD), ISO-3166, country, capital, region, currency, currency code and
population. Download and load the data into your database. It's available in several
formats such as Comma-delimited ASCII, Microsoft® Access & Microsoft® Excel. The
import process is same as the IP-Country database by using the LOAD DATA feature
available in MYSQL.

mysql> LOAD DATA INFILE "/Countries.csv" INTO TABLE Countries FIELDS


TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r';

<?php
// Replace this MYSQL server variables with actual configuration
$mysql_server = "mysql_server.com";
$mysql_user_name = "UserName";
$mysql_user_pass = "Password";

// Retrieve visitor IP address from server variable REMOTE_ADDR


$ipaddress = getenv(REMOTE_ADDR);

// Convert IP address to IP number for querying database


$ipno = Dot2LongIP($ipaddress);

// Connect to the database server


$link = mysql_connect($mysql_server, $mysql_user_name, $mysql_user_pass)
or die("Could not connect to MySQL database");

// Connect to the IP2Location database


mysql_select_db("IP2Location") or die("Could not select database");

// SQL query string to match the recordset that the IP number fall between
the valid range
$query = "SELECT * FROM IPCountry WHERE $ipno <= ipTO AND $ipno>=ipFROM";

// Execute SQL query


$result = mysql_query($query) or die("IP2Location Query Failed");

// Retrieve the recordset (only one)


$row = mysql_fetch_object($result);

// Keep the country information into two different variables


$countrySHORT = $row->countrySHORT;
$countryLONG = $row->countryLONG;

// SQL query string to match the recordset that the TLD with Country Short
Name
$query = "SELECT * FROM Countries WHERE TLD='$countrySHORT';
// Execute SQL query
$result = mysql_query($query) or die("IP2Location Query Failed");

// Retrieve the recordset (only one)


$row = mysql_fetch_object($result);

// Keep the Currency Code in a variable


$currencyCode = $row->CurrencyCode;

// Free recordset and close database connection


mysql_free_result($result); mysql_close($link);

// If the visitors are from JP


if ($countrySHORT == "JP")
{
//Print Price: YEN 120.00
echo “Price: $currentCode 120.00”;
}
else
{
// Otherwise
//Print USD 1.00
echo “Price: $currentCode 1.00”;
}
exit;

// Function to convert IP address (xxx.xxx.xxx.xxx) to IP number (0 to


256^4-1)
function Dot2LongIP ($IPaddr) {
if ($IPaddr == "")
{
return 0;
} else {
$ips = split ("\.", "$IPaddr");
return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 *
256 * 256);
}
}
?>

Hexasoft Development Sdn. Bhd. © 2001-2009 All Right Reserved


To obtain permission to reuse or republish this article, please write
to sales@ip2location.com. Republication is welcome for no charge.

Vous aimerez peut-être aussi