【发布时间】:2019-04-28 13:23:38
【问题描述】:
我的 HTML 脚本收集纬度和经度并通过 ajax 将它们发送到另一个 PHP 脚本,该脚本将这些值插入 mysql,问题是 AJAX 将 NULL 值插入表中。它为纬度和经度插入“0.000000”值,纬度和经度是数据库中的 float(10,6) 类型,如互联网所述,用于 gps 坐标的最佳实践。我显然是新开发人员,请帮助 -- HTML 脚本
<!DOCTYPE html>
<html>
<head>
<title>AJAX DATABASE</title>
<script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
<script type="text/javascript" charset="utf-8">
/*/ Wait for Cordova to load
/*/
document.addEventListener("deviceready", onDeviceReady, false);
var watchID = null;
// Cordova is ready
//
function onDeviceReady() {
// Throw an error if no update is received every 30 seconds
var options = {enableHighAccuracy:true, timeout: 3000, maximumAge:0};
watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
}
// onSuccess Geolocation
//
function onSuccess(position) {
var latitude = document.getElementById("lat");
latitude.innerHTML = position.coords.latitude;
var longitude = document.getElementById("longitude");
latitude.innerHTML = position.coords.latitude;
insertDB(position.coords.latitude,position.coords.latitude);
}
// onError Callback receives a [PositionError](PositionError/positionError.html) object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
// Options: throw an error if no update is received every 30 seconds.
//
var watchID = navigator.geolocation.watchPosition(onSuccess, onError, { timeout: 30000 });
// Sends latitude & longitude value to php script and alerts on success
function insertDB(latitude, longitude){
var xttp = new XMLHttpRequest();
xttp.onreadystatechange = function(){
if(this.readyState == 4){
document.getElementById('longitude').innerHTML =
this.responseText;
alert("state changed by ajax")
}
}
xttp.open("GET", "ConnectTest.php?
latitude="+latitude+"&longitude="+longitude, true);
xttp.send();
}
</script>
</head>
<body>
<p id="lat"></p><br>
<p id="longitude"></p>
</body>
</html>
和 PHP --
<?php
//POST VARIABLES
$one = $_GET['latitude'];
$two = $_GET['longitude'];
//ESTABLISH CONNECTION
$servername = "localhost:3306";
$user = "client";
$pass = "sonic_client";
$db_name = "sonicstrains";
$server = mysqli_connect($servername, $user, $pass, $db_name);
$sql = "SELECT * FROM 'users' WHERE 'latitude' = ".$two;
$result = mysqli_query($server, $sql);
if(!isset($_GET['latitude'])){
echo "Nothing is set";
}
if(!$server){
die("Connetion error".mysqli_connect_error());
}else{
if (!$result){
$insert = "INSERT INTO users (latitude, longitude) VALUES ('$one', '$two')";
mysqli_query($server, $insert);
echo "Coordinates Inserted";
}
}
?>
【问题讨论】:
-
您将参数放在 URL 中,这意味着您需要使用
$_GET来访问它们。在这种情况下,您在代码中使用POST的事实无关紧要。 POST 参数总是放在请求的正文中,你是send()ing 一个空的正文。您还应该查看fetch,这将使您的过时代码更简单。 -
不确定是什么问题。你想要0.0000?你想要空吗?
-
帮了大忙,但我的经度由于某种原因没有发布。仍然发布 0.000,知道为什么吗?我将 php 中的两个参数都更改为 $_Get['foo']
-
@SonicStrains 您在函数 insertDB(latitude) 中仅传递纬度值。您需要同时传递纬度和经度值函数 insertDB(latitude, longitude)
-
我更新了函数以包含经度,但只有纬度仍在发布
标签: javascript mysql ajax