将JavaScript获得的地理位置传递到HTML表单中以发送到数据库

时间:2019-01-17 20:13:05

标签: javascript php html

我正在尝试获取用户的当前位置,并将其存储在隐藏的输入中,以便在用户填写完表格后将其位置与其他所有内容一起发送到要存储的数据库中。

我遇到的问题是我的php上的未定义索引,这使我相信坐标未发送到输入。

我看过其他谈论同一主题的帖子,但找不到我的问题的答案。

这是我的HTML表单(其中的DIV仅用于显示坐标):

<form method="POST" action="example.php">
        <br />
        <div id="latGPS"></div>
        <input type="hidden" id="geoPosLat" value ="" />
        <br />
        <div id="lonGPS"></div>
        <input type="hidden" id="geoPosLon" value ="" />
        <br />
        <input type="text" name="addPoiDescription" placeholder="Description" style="width:200px; height:100px" />
        <br />
        <input type="submit" value="Submit!" />
    </form>

Javascript:

function init(){

//Get user's geolocation
if(navigator.geolocation)
{
    navigator.geolocation.watchPosition (processPosition, handleError, {enableHighAccurary:true, maximumAge: 5000});

}
else
{
    alert("Sorry, geolocation not supported");
}

}


// Process GPS Information
function processPosition(gpspos)
{
var latGPS = gpspos.coords.latitude;
    var lonGPS = gpspos.coords.longitude;

//Show their location
document.getElementById("latGPS").innerHTML = 'Latitude: ' + latGPS;
document.getElementById("lonGPS").innerHTML = 'Longitude: ' + lonGPS;

//store location 
document.getElementById("geoPosLat").innerHTML = latGPS;
document.getElementById("geoPosLon").innerHTML = lonGPS;
}

function handleError(err)
{
alert ('An error occurred: ' + err.code);
 }

PHP:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$aPoiName = $_POST["addPoiName"];
$aPoiCountry = $_POST["addPoiCountry"];
$aPoiRegion = $_POST["addPoiRegion"];
$aPoiType = $_POST["addPoiType"];
$aPoiDescription = $_POST["addPoiDescription"];
$lat = $_POST["geoPosLat"];
$lon = $_POST["geoPosLon"];


// Curl -----------------
// Initialize
$connection = curl_init();

//URL to sned the request to
curl_setopt($connection, CURLOPT_URL, 'https://example.php');

$dataToPost=
[   "Name" => $aPoiName ,
    "Country" => $aPoiCountry ,
    "Region" => $aPoiRegion , 
    "Type" => $aPoiType ,
    "Description" => $aPoiDescription,
    "Lat" => $lat,
    "Lon" => $lon
];
//Execute the request 
curl_setopt($connection,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($connection,CURLOPT_POSTFIELDS,$dataToPost);
$response = curl_exec($connection);

//HTTP CODE
$httpCode = curl_getinfo($connection, CURLINFO_HTTP_CODE);
echo "The script returned the HTTP status code: $httpCode <br />";
//close 
curl_close($connection);

?>

2 个答案:

答案 0 :(得分:0)

不确定这是否可以解决您的问题,但是我很确定您需要在HTML中为每个字段指定一个名称,然后将它们链接到PHP,而不是使用ID。

例如,您的HTML应该是

  <input name="LATPOSNAME" type="hidden" id="geoPosLat" value ="" />

然后您就可以像这样将名称挂接到您的php

$lat = $_POST["LATPOSNAME"];

PHP将该元素的名称属性name="unique-name-here"值用作键,以使您能够在提交表单时访问指定表单字段元素的数据值。

如果您不声明名称,那么您的PHP将无法获得您的值,因为没有密钥。这意味着,在表单元素提交到服务器之后,您将无法访问该元素表单数据值,因为其键是未定义的。

答案 1 :(得分:-1)

为了使您必须使用Ajax和jquery