Seb7 - 9:04 am on Jul 3, 2012 (gmt 0)
I've played abit with IP/address databases. Accuracy is astonishingly wrong. There are lots of way to help figure out their location, I think they've all been covered above. You should still allow the user to correct it - then store the corrections.
I read some stuff about pinging triangulation last year, comparing ping times with local known landmarks. Apparently its possible to get within a few hundred metres.
Just like to add, this sort of information is very valuable, which is why Google is putting a lot of effort in this area. I personally think this why they were recording wifi data in their cars.