Take a look at the following:
- IP address geolocation SQL database
- Geo Locate IP Address XML API Whois Map Country Provider
- How to Geolocate Visitors Using an IP-to-Country Database
- Free IP to Country Database
- My IP Address Lookup and Geotarget IP Project
- MaxMind - Open Source IP Address to Country Database
- IP address geolocation SQL database
Also on Stack Overflow:
- What is the most applicable solution to detect which country an ip belongs to?
- Is there any possible way to find the name of the country using IP with scripting language PHP?
- IP to Country?
- code for finding the state,country,city from the IP Adress in php
Once you have the country code, then you can display the flag with these free icon sets which use ISO country codes:
- Flag icons
- Flags of the World
PHP Advent also just published a whole article on a very similar process: