2013-11-04 41 views
4

我想做一個簡單的形式,需要地址和郵政編碼,所以我想知道是否有一種方法來自動填充這些字段基於用戶有什麼已經鍵入。從郵編自動填充國家和城市,並相反

因此,例如,如果他決定只輸入郵政編碼,城市和國家/地區將自動填充,反之亦然。

搜索過了一會兒,我發現這些數據庫,我可能可能使用

但除此之外,我不知道如何做到這一點使用PHP和MySQL 。任何幫助,將不勝感激。

+1

製作一個包含'country'和'zip_code'列的表格。一旦一個國家被輸入,通過ajax發送輸入的國家到一個頁面,它會像查詢數據庫那樣查詢數據庫:「SELECT zip_code FROM zipcode WHERE country ='$ country''並填充zip_code字段的響應 –

+0

或者它是一個外部數據庫想查詢? – putvande

+0

我只有你在我提供的兩個鏈接中可以找到的東西,唯一的其他選擇是使用地理位置api作爲Rishabh建議的。我正在考慮使用mysql從zip_code_database.csv獲取數據並從那裏開始... – ealiaj

回答

1

*這是很容易的什麼ü需要做的是剛剛拿到從用戶的郵政編碼,您可以使用谷歌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; 

比你可以插入上述兩個變量在database.simple $經度和緯度$作爲:)。去下面的鏈接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); 
     } 
    }); 
    } 

讀一下反向geocodng這裏並修改代碼https://developers.google.com/maps/documentation/javascript/geocoding#ReverseGeocoding

用途:的getLocations(經緯度:的GLatLng,回調:函數)

此方法執行反向地理編碼,轉換將緯度/經度對映射到人類可讀的地址。 getLocations()向Google地理編碼服務發送請求,要求它返回給定latlng的地址並在給定回調中傳遞響應。

由於此方法需要調用Google服務器,因此您還必須傳遞迴調方法來處理響應。該響應將包含一個狀態碼,如果成功,則包含一個或多個地標對象。

請注意,此方法可能會傳遞一個可尋址的字符串,如上所述;在這種情況下,該服務將執行標準的地理編碼。但是,如果第一個參數包含GLatLng,則該服務將執行反向地理編碼。

+0

OP要求國家/郵編,而不是經度/緯度。 – putvande

+0

@putvande我舉了一個例子,說明如何實現他想要的,我的方法比其他人建議的要好得多。 –

+0

你可以改變它,所以它在你的例子中返回國家? – putvande

-1

你可以做什麼@RoyalBg賽斯但如果「基於什麼用戶已經輸入了」你應該添加一列userid

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

'表'locations'中的'userid'? :))))我不認爲他需要根據用戶的建議插入coutries/zipcode,但基於他給出的鏈接。 –

相關問題