2015-04-07 50 views
2

我試圖對用戶提交的地址進行地理編碼並將其存儲到數據庫中。表單調用一個php文件,其中javascript檢索地址並對其進行地理編碼。然後lat和lng值被傳遞給php並存儲在數據庫中,但是數據庫中唯一的值是零。將變量從html傳遞到javascript到php

HTML文件:

<html> 
    <body> 
    <form action="registerEvent.php" id="form" method="post">  
     <input id="address" name="address" placeholder="Adrese" type="text">      
     <button type="submit" id="submit">Send</button>    
    </form> 
    </body> 
</html> 

registerEvent.php:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script> 
<script> 
var geocoder; 
var inputLat; 
var inputLng; 

function codeAddress() { 

    geocoder = new google.maps.Geocoder(); 

    var address = document.getElementById('address').value; 
    geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 

    var inputLat = event.latLng.lat(); 
    var inputLng = event.latLng.lng();  

    } else { 
     alert('Geocode was not successful for the following reason: ' + status); 
    } 
    }); 

} 

function passvariable() { 
    window.location.href = "registerEvent.php?lat=" + inputLat; 
    window.location.href = "registerEvent.php?lng=" + inputLng; 
} 

    codeAddress(); 
    passvariable(); 

</script> 



<?php 
    require("dbinfo.php"); 

    $connection=mysqli_connect ('localhost', $username, $password); 
if (!$connection) { 
    die('Not connected : ' . mysql_error()); 
} 

$db_selected = mysqli_select_db($connection, $database); 
if (!$db_selected) { 
    die ('Can\'t use db : ' . mysql_error()); 
} 

    $lat =$_GET['inputLat']; 
    $lng =$_GET['inputLng']; 

    $sql = "INSERT INTO sometable (lat, lng) 
VALUES ('$lat', '$lng')"; 

    if (!mysqli_query($connection,$sql)) { 
     die('Error: ' . mysqli_error($connection)); 
    }; 

    mysqli_close($connection); 
?> 

回答

1

要調用window.location.href兩次和變量PHP的一部分似乎不正確($_GET['inputLat']而不是lat,和$_GET['inputLong']而不是lon

如果HTML文件是一個單獨的文件,那麼你需要得到以不同的方式地址: 與

var address = "<?php echo $_POST['address']; ?>" 

更換

var address = document.getElementById('address').value; 

的JS函數應該看起來更像這個

<script src="https://maps.googleapis.com/maps/api/jsv=3.exp&signed_in=true"> 
</script> 
<script> 
var geocoder; 
var inputLat; 
var inputLng; 

function codeAddress() { 
    geocoder = new google.maps.Geocoder(); 
    var address = document.getElementById('address').value; 
    geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
    var inputLat = event.latLng.lat(); 
    var inputLng = event.latLng.lng();  
    window.location.href = "registerEvent.php?lat=" + inputLat + "&lng=" + inputLng; 
    } else { 
     alert('Geocode was not successful for the following reason: ' + status); 
    } 
    }); 

} 
codeAddress(); 
</script> 

而且PHP的一部分:

// ... 
    $lat =$_GET['lat']; 
    $lng =$_GET['lng']; 

    if (!empty($lat) && !empty($lng)) {  
     $sql = "INSERT INTO sometable (lat, lng) VALUES ('$lat', '$lng')"; 
     if (!mysqli_query($connection,$sql)) { 
     die('Error: ' . mysqli_error($connection)); 
     }; 
    } 

    mysqli_close($connection); 

如果一切都在同一個文件,表單按鈕應該改成這樣的:

<button type="button" id="submit" onclick="codeAddress()">Send</button>  
+0

我認爲HTML文件是一個單獨的文件和registerEvent.php顯示重定向到自身的JavaScript,它然後保存 – cornelb

-1

一次,使用這段代碼從一個地址獲取緯度/經度,都在PHP(舊API):

$address = "......"; 
$json = file_get_contents("http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=".urlencode($address)); 
$json = json_decode($json); 

if ($json->status == "OK") 
    return $json->results[0]->geometry->location; 
-1

的JavaScript正在尋找在html輸入的值

var address = document.getElementById('address').value; 

並沒有值:

<input id="address" name="address" placeholder="Adrese" type="text"> 
0

在你的代碼的形式做一個POST到PHP頁面,但你沒有得到從谷歌API的任何座標張貼只有地址字段。

再加上你打的API給出了一個複雜的返回類型,你應該檢查它...以獲得緯度和經度,你必須從數組中選擇一個元素,並檢查geometry.location ...(你可以檢查:https://developers.google.com/maps/documentation/javascript/reference#GeocoderResult

所以,首先,在張貼表單之前先做一個ajax調用以獲取coords。

只需添加onsubmit="return codeAddress();",然後在您的codeAddress函數中添加一個return false;以防止默認操作(阻止提交表單自身),並通過GET將數據發送到registerEvent.php。

在HTML:

<html> 
    <head> 
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script> 
    <script type="text/javascript"> 
     function codeAddress() { 
      var geocoder = new google.maps.Geocoder(); 
      var address = document.getElementById('address').value; 
      geocoder.geocode({ 'address': address}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       var inputLat = results[0].geometry.location.lat(); 
       var inputLng = results[0].geometry.location.lng();  
       window.location.href = "registerEvent.php?inputLat=" + inputLat + "&inputLng=" + inputLng; 
      } else { 
       alert('Geocode was not successful for the following reason: ' + status); 
      } 
      }); 
      return false; 
     } 
    </script> 
    </head> 
    <body> 
    <form action="registerEvent.php" id="form" method="post" onsubmit="return codeAddress()">  
     <input id="address" name="address" placeholder="Adrese" type="text">      
     <button type="submit" id="submit">Send</button>    
    </form> 
    </body> 
</html> 

在你的PHP:

<?php 
require("dbinfo.php"); 
$connection=mysqli_connect ('localhost', $username, $password); 
if (!$connection) { 
    die('Not connected : ' . mysql_error()); 
} 
$db_selected = mysqli_select_db($connection, $database); 
if (!$db_selected) { 
    die ('Can\'t use db : ' . mysql_error()); 
} 
$lat =$_GET['inputLat']; 
$lng =$_GET['inputLng']; 
$sql = "INSERT INTO sometable (lat, lng) VALUES ('$lat', '$lng')"; 
if (!mysqli_query($connection,$sql)) { 
    die('Error: ' . mysqli_error($connection)); 
}; 
mysqli_close($connection); 
?>