0

我正在用 php 开发一个上下文搜索引擎。为此,当用户键入查询时,我需要她的 latlong 和 time。我正在开发 php 中的搜索框。为了获得 latlong 我正在使用 HTML 5 geolocation api。我从 stackoverflow 中的帖子中汲取灵感,编写了以下两个文件。

订单.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 提交表单,它们也不会被重置。

在这种情况下,我在这里看到了其他类似的问题并应用了他们的解决方案,但它们似乎都没有奏效。所以请帮忙。谢谢你。

4

3 回答 3

2

在 process.php 中,您使用 GET 来获取从 process.php 表单提交中发布的值。

你可以改变:

$latitude=$_GET['latitude'];
$longitude=$_GET['longitude'];

进入

$latitude=$_REQUEST['latitude'];
$longitude=$_REQUEST['longitude'];

$_REQUEST基本上同时包含 GET 和 POST(为安全起见,请确保没有具有相同键名的冲突 get/post 参数)。

于 2013-03-20T03:30:57.677 回答
0

您通过 GET 方法提交第一个表单,该方法将值放入 URL 中,而 process.php 页面上的第二个表单使用 POST 方法,该方法将值放入请求的正文而不是 URL。

然后,您从超级全局中获得经纬度,而$_GET超级全局不再具有纬度和长度,因为它们现在在超级全局中$_POST

您应该始终使用 GET 或 POST,对于搜索引擎,我建议使用 GET,以便用户可以传递指向结果的链接(您不能为 POST 页面添加书签)。

于 2013-03-20T03:27:23.837 回答
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; ?>">
于 2013-03-20T03:30:57.787 回答