如何在连续提交表单后保留变量的值

时间:2013-03-20 03:07:54

标签: php javascript html5 forms

我正在开发一个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提交表单也不会重置它们。

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

3 个答案:

答案 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; ?>">