为啥我的谷歌地图 Lat/Lng 变量不存储任何内容?
Posted
技术标签:
【中文标题】为啥我的谷歌地图 Lat/Lng 变量不存储任何内容?【英文标题】:Why isn't my google map Lat/Lng variables storing anything?为什么我的谷歌地图 Lat/Lng 变量不存储任何内容? 【发布时间】:2018-05-04 18:29:01 【问题描述】:我目前正在为大学做一个项目,我正在尝试在我的网站上实施谷歌地图
ReportStolenBike.js:
var mapCenter = new google.maps.LatLng(51.8979988098144,-2.0838599205017);
var geocoder = new google.maps.Geocoder();
var infowindow = new google.maps.InfoWindow();
var myMap;
var marker;
function initialize()
var mapOptions =
zoom: 15,
center: mapCenter
;
myMap = new google.maps.Map(document.getElementById("mapInput"), mapOptions);
marker = new google.maps.Marker(
map: myMap,
position: mapCenter,
draggable: true
);
function markerDragged()
var selectedPos = 'latLng': marker.getPosition();
geocoder.geocode(selectedPos, showAddressInInfoWindow);
google.maps.event.addListener(marker, 'dragend', markerDragged);
function showAddressInInfoWindow(results)
if (results[0])
infowindow.setContent(results[0].formatted_address);
infowindow.open(myMap, marker);
google.maps.event.addDomListener(window, 'load', initialize);
$('#formReportStolen').on('submit', function(e)
var formData = new FormData(this);
var lat = marker.getPosition().lat();
var lng = marker.getPosition().lng();
formData.append("lat", lat);
formData.append("lng", lng);
e.preventDefault();
$.ajax(
url: "PublicReportStolenDAO",
method : "POST",
data: formData,
contentType: false,
cache: false,
processData: false,
success:function(echoedMsg)
if (echoedMsg == "True")
alert("Successfully reported.");
);
);
所以在那个 java 脚本类中,我正在显示我的谷歌地图并试图获取用户的当前位置。我的地图有一个弹出窗口,显示我的地图确实引用了纬度和经度,但是当尝试将它们存储到我的 sql 数据库中时,什么都没有存储。
PublicReportStolenDAO.php
<?php
function StolenReg()
$bikeID = $_POST['txtBikeID'];
$date = $_POST['txtDateofTheft'];
$lat = $_POST['lat'];
$lng = $_POST['lng'];
include "../../include/config.php";
$verifyFuncBike = "SELECT email FROM `tbl_user` WHERE email = '$email'";
$resultBike = mysqli_query($connection,$verifyFuncBike);
$rowBike = mysqli_fetch_array($resultBike,MYSQLI_ASSOC);
$countBike = mysqli_num_rows($resultBike);
if($countBike == 1)
$sql = "INSERT INTO `tbl_stolen`(BikeID, Date, Lat, Lng)".
" VALUES ".
"('$bikeID', '$date', '$lat', '$lng')";
if(mysqli_query($connection, $sql))
echo "Report successfully sent, please return back to the site.";
echo $lat;
echo $lng;
else
echo mysqli_error($connection);
else
echo "Error, please return back to the site and try again.";
mysqli_close($connection);
stolenReg();
?>
抱歉,代码可能很糟糕,我对 Web 开发非常陌生
【问题讨论】:
您的代码容易受到SQL injection attacks 的攻击。您应该通过mysqli 或PDO 驱动程序使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。 是的,我知道,这个网站不会公开发布给任何人。谢谢你 确保$lat
和$long
不为空
如何检查?考虑到它不是回显,使用 java 脚本在控制台中显示文本的功能是什么?
“本网站不会公开发布给任何人” - 这并不是准备好的陈述对您有帮助的全部。例如,如果有人发送包含单引号或以反斜杠结尾的值,则将未转义的数据添加到数据库可能会破坏您的查询。所有的 SQL 注入都不是故意的。
【参考方案1】:
我不认为这是最好的答案。但在你的代码中使用
var lat = marker.getPosition().lat();
这不是获取坐标的功能。要获得您的坐标,您需要进行地理定位。所以应该是
var lat = position.coords.latitude
var lat = position.coords.longitude
为了确保你的位置,你可以使用这个
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(function(position)
var lat = position.coords.latitude
var lat = position.coords.longitude
$.ajax(
do your ajax
);
);
对不起,我的语言不好。希望对您有所帮助。
【讨论】:
它似乎并没有改变任何东西。它仍然没有在 lat 或 lng 变量中存储任何内容。 那么你的错误是什么?如果你使用 chrome,它会在开发者工具上显示错误以上是关于为啥我的谷歌地图 Lat/Lng 变量不存储任何内容?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取谷歌地图上几个地方的地址,这些地方显示不可用给定的lat,lng