【问题标题】:Auto fill country and city from zip code, and the oposite从邮政编码自动填写国家和城市,反之亦然
【发布时间】:2013-11-14 20:52:33
【问题描述】:

我正在尝试制作一个需要地址和邮政编码的简单表单,所以我想知道是否有一种方法可以根据用户已经输入的内容自动填充这些字段。

例如,如果他决定只输入邮政编码,则城市和国家/地区字段将自动填写,反之亦然。

搜索了一段时间后,我发现了这些我可能会使用的数据库

但除此之外,我不确定如何使用 PHP 和 MySQL 来做到这一点。任何帮助,将不胜感激。

【问题讨论】:

  • 制作一个包含countryzip_code 列的表格。输入国家/地区后,通过 ajax 将输入的国家/地区发送到页面,该页面像 SELECT zip_code FROM zipcodes WHERE country = '$country' 一样查询数据库并使用响应填充 zip_code 字段
  • 还是你要查询的外部数据库?
  • 我只有你可以在我提供的两个链接中找到的内容,唯一的其他选择是使用 Rishabh 建议的地理位置 api。我正在考虑使用 mysql 从 zip_code_database.csv 获取数据并从那里开始......

标签: php html mysql geolocation


【解决方案1】:

*这很简单,您只需从用户那里获取邮政编码,然后您就可以使用 google api 获取 $country 和 $city。这里我举个例子 我如何从邮政编码(即邮政编码)获取经度和纬度。

$postcode=$_POST('postcode');
                if($postcode)
                {

                    $address = urlencode($postcode);
                    $url='http://maps.googleapis.com/maps/api/geocode/json?address='.$address.'&sensor=false';

                    $ch = curl_init(); 
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
                    curl_setopt($ch, CURLOPT_URL, $url);
                    $data = curl_exec($ch);
                    curl_close($ch);
                    $source = $data;
                    $obj = json_decode($source);
                    $lat = $obj->results[0]->geometry->location->lat;
                    $long = $obj->results[0]->geometry->location->lng;


                }
$longitude=$long;
$latitude=$lat;

您可以在数据库中插入上述两个变量 $longitude 和 $latitude。就这么简单:)。转到以下链接 https://developers.google.com/maps/documentation/geocoding/?csw=1

现在要从经度和纬度获取国家名称,请使用反向地理编码。 在 latLng 参数中提供逗号分隔的纬度/经度对。

 var geocoder;
  var map;
  var infowindow = new google.maps.InfoWindow();
  var marker;
  function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(40.730885,-73.997383);
    var mapOptions = {
      zoom: 8,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
  }

  function codeLatLng() {
    var input = document.getElementById("latlng").value;
    var latlngStr = input.split(",",2);
    var lat = parseFloat(latlngStr[0]);
    var lng = parseFloat(latlngStr[1]);
    var latlng = new google.maps.LatLng(lat, lng);//here you will get your country and city name
    geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        if (results[1]) {
          map.setZoom(11);
          marker = new google.maps.Marker({
              position: latlng,
              map: map
          });
          infowindow.setContent(results[1].formatted_address);
          infowindow.open(map, marker);
        }
      } else {
        alert("Geocoder failed due to: " + status);
      }
    });
  }

在这里阅读反向地理编码并根据您的需要修改代码https://developers.google.com/maps/documentation/javascript/geocoding#ReverseGeocoding

使用:getLocations(latlng:GLatLng, callback:function)

此方法执行反向地理编码,将纬度/经度对转换为人类可读的地址。 getLocations() 向 Google 地理编码服务发送一个请求,要求它返回给定 latlng 的地址并在给定回调中传递响应。

由于此方法需要调用 Google 服务器,因此您还必须传递回调方法来处理响应。此响应将包含一个状态代码,如果成功,将包含一个或多个 Placemark 对象。

请注意,此方法可能会传递一个可寻址的字符串,如上所示;在这种情况下,该服务将执行标准地理编码。但是,如果第一个参数包含 GLatLng,则服务将执行反向地理编码。

【讨论】:

  • @putvande 我举了一个例子如何实现他想要的,我的方法比其他人建议的要好得多。
  • 你能改变它,让它在你的例子中返回国家吗?
  • @putvande 是的,我刚刚做了。
  • 这实际上是我第一次尝试使用 php、html 等,作为完成 w3school 教程后的培训,所以即使我得到你想要做的事情,我也不知道如何实施它在我正在尝试制作的页面中。
  • @green_leaf 浏览我提供的链接,尝试理解,如果你会努力学习并不难。而且我的答案中的代码并不难实现。这样你会得到一个为您的问题优化答案。如果您有任何疑问或问题,您可以问我。
【解决方案2】:

你可以做@RoyalBg sais 但如果“基于用户已经输入的内容”你应该添加一个列userid

SELECT zip_code FROM locations WHERE country like '%$country%' and userid = 254

【讨论】:

  • userid 在表中locations? :)))) 我认为他不需要根据用户建议插入国家/邮政编码,而是根据他提供的链接。
猜你喜欢
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
相关资源
最近更新 更多