In the previous segment, I showed you how to build a procedural PHP script which was capable of mapping users' IP addresses to their corresponding countries via the "iptocountry" MySQL table. Thus, in this last section of the article, I'd like to demonstrate how this same task can be performed by way of an object-oriented approach. To do this, I'm simply going to create a basic MySQL abstraction class, which will carry out the IP-to-country mapping process by means of a simple interface. The signature of this class, along with an example of how to use it, is listed below: // define 'MySQL' class class MySQL{ private $mysqli; private $result; public function __construct($host='host',$user='user',$password='password',$database='database'){ // connect to MySQL and select database $this->mysqli=new mysqli($host,$user,$password,$database); if(mysqli_connect_errno()){ throw new Exception('Error connecting to MySQL: '.$this->mysqli->error); } } // run SQL query public function query($query){ if(!$this->result=$this->mysqli->query($query)){ throw new Exception('Error running SQL query: '.$this->mysqli->error); } } // fetch one row public function fetchRow(){ while($row=$this->result->fetch_assoc()){ return $row; } return false; } } try{ // connect to MySQL and select database $db=new MySQL('host','user','password','database'); // get user IP address $ip=sprintf('%u',ip2long($_SERVER['REMOTE_ADDR'])); // Map IP Address to country using 'iptocountry' database $db->query("SELECT country FROM iptocountry WHERE lower_bound <=$ip AND upper_bound >= $ip LIMIT 1"); // get row from database table $row=$db->fetchRow(); // display country which user is accessing from echo 'Welcome dear visitor, you are accessing our web site from : '.$row['country']; } catch(Exception $e){ echo $e->getMessage(); exit(); } If you develop object-oriented applications with PHP on a frequent basis, then you'll grasp the logic that drives the above script in a snap. In this particular situation, users' IP addresses are directly mapped to their respective countries by performing the same SQL query used with the procedural example. In this case the "iptocountry" table is queried by means of the "MySQL" accessing class shown before. Finally, as usual with many of my articles on PHP development, feel free to improve all of the code samples included in this article, and use them as a guide for developing different, more creative IP-to-country mapping applications. Final thoughts Over the second installment of this series, you hopefully learned how to take advantage of the "iptocountry" MySQL table created in the preceding tutorial to develop a couple of geo-location applications with PHP. First I used a procedural approach to build the application, and then, in the second example, I showed you how to build it using the object-oriented paradigm. Of course, both programs offer practically the same level of functionality, so feel free to pick the one that best suits your needs. In the upcoming tutorial, I'll be discussing how to generate dynamic web pages in different languages, naturally by using the previous MySQL lookup table. Therefore, now that you know what the next article will be about, you can't miss it!
blog comments powered by Disqus |
|
|
|
|
|
|
|