ip-geolocation is often not extramly exact.
I would force user to enter country, city and zip.
And pre fill form with data from browser location api.
In database i would store country, city, zip, and lat long.
Find matching city + zip by lat long and backword is very easy with google geocoder api. https://developers.google.com/maps/documentation/geocoding/
Then you only needs the lat long values of big citys for search in area. Easyes is to search in squre not in circle. But if you realy needs a cirty, you have to use a databse with gis functionalety. http://postgis.refractions.net/