我正在开发一个php上下文搜索引擎。为此,当用户键入查询时,我需要她的latlong和时间。我正在开发php中的搜索框。为了得到latlong我正在使用HTML 5地理位置api。我已经通过stackoverflow中的帖子了解了以下两个文件。
order.php
<html>
<head>
<script type="text/javascript">
function getLocation(){
var x = document.getElementById("demo");
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML="Geolocation is not supported by this browser.";
}
}
function showPosition(position){
var latitude=document.getElementById("latitude"),
longitude=document.getElementById("longitude");
latitude.value = position.coords.latitude;
longitude.value = position.coords.longitude;
}
</script>
</head>
<body onload="getLocation()">
<p id="demo"></p>
<form id="searchbox" action="process.php" method="get">
<input name="q" type="text" placeholder="Type here">
<input name="latitude" id="latitude" type="hidden">
<input name="longitude" id="longitude" type="hidden">
<input id="submit" type="submit" value="Search">
</form>
</body></html>
另一个文件是process.php
<html>
<body>
<form id="searchbox" action="process.php" method="post">
<input name="q" type="text" placeholder="Type here">
<input name="latitude" id="latitude" type="hidden" value="<?php $latitude=$_POST['latitude']; echo $latitude; ?>">
<input name="longitude" id="longitude" type="hidden" value="<?php $longitude=$_POST['longitude'];echo $longitude; ?>">
<input id="submit" type="submit" value="Search">
</form>
<?php $quantity=$_POST['quantity'];
$date = date('Y-m-d H:i:s');
$arr=explode(" ",$date);
$latitude=$_GET['latitude'];
$longitude=$_GET['longitude'];
echo "Latitude=". $latitude."Longitude=". $longitude." Time=".$arr[1]."<br>";
?>
</body>
</html>
问题在于,每当我从process.php再次提交表单时,纬度和经度值都会重置。因此,如何保留我在登陆process.php后获得的值,即使我多次从process.php提交表单也不会重置它们。
在这种情况下,我在这里看到了其他类似的问题,并应用了他们的解决方案,但它们似乎都没有起作用。所以请帮忙。谢谢。
答案 0 :(得分:2)
在process.php中,你正在使用GET来获取从process.php表单提交中发布的值。
您可以更改:
$latitude=$_GET['latitude'];
$longitude=$_GET['longitude'];
向
$latitude=$_REQUEST['latitude'];
$longitude=$_REQUEST['longitude'];
$_REQUEST
基本上包含GET和POST(为了安全起见,请确保没有冲突的get / post params具有相同的键名称。)
答案 1 :(得分:0)
您正在通过GET方法提交第一个表单,该方法将值放在URL中,第二个表单放在process.php页面上,使用POST方法将值放在请求的正文中,而不是URL。 / p>
然后你从$_GET
超级全球变得越来越长,因为它们现在位于$_POST
超全局中,所以不再持有纬度和长度。
您应该始终使用GET或POST,对于搜索引擎,我建议使用GET,以便用户可以传递指向结果的链接(您无法为POST页面添加书签)。
答案 2 :(得分:0)
您正在寻找POST请求中的Geolocation值,而实际上初始表单是将值作为GET请求发送。
更改process.php
以下行:
<input name="latitude" id="latitude" type="hidden" value="<?php $latitude=$_POST['latitude']; echo $latitude; ?>">
<input name="longitude" id="longitude" type="hidden" value="<?php $longitude=$_POST['longitude'];echo $longitude; ?>">
到
<input name="latitude" id="latitude" type="hidden" value="<?php $latitude=$_REQUEST['latitude']; echo $latitude; ?>">
<input name="longitude" id="longitude" type="hidden" value="<?php $longitude=$_REQUEST['longitude'];echo $longitude; ?>">