如何每隔X分钟将GPS位置发送到mysql表

时间:2019-02-10 09:40:04

标签: javascript mysql gps

我正在编写一些代码,每5分钟将用户当前的GPS坐标保存到mysql表中。我现在很熟悉PHP和学习javascript,因此在代码的javascript部分需要一些帮助。

我当前的代码示例将每5秒获取用户的GPS位置并将其设置为javascript变量lat和lon。 javascript函数现在每5秒运行一次,但最终将更新为每5分钟运行一次。

每次调用函数时,我需要添加什么代码以将lat和lon变量插入到mysql表中?

这是我当前的代码示例:

<!DOCTYPE html>
<html>
<body>

<p>Get GPS Location Every 5 seconds</p>

<p id="coordinates"></p>

<body onload="getLocation()"> 

<script>
var x = document.getElementById("coordinates");

function getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
	setTimeout(getLocation, 5000);
  } else { 
    x.innerHTML = "Geolocation is not supported by this browser.";
  }
}

function showPosition(position) {
  x.innerHTML = "Latitude: " + position.coords.latitude + 
  "<br>Longitude: " + position.coords.longitude;
}
</script>

</body>
</html>

2 个答案:

答案 0 :(得分:0)

简而言之:

您应该使用服务器端,而不是使用客户端JS对数据库的直接访问

深度:

首先,让我们同意您的数据库对您来说很有价值,并且您想尽可能保持其安全性

第二,我们还同意客户端代码(尤其是JS)容易受到攻击,并且可能是潜在攻击者受到攻击的理想之地。

在完成所有设置后,让我们定义如何创建与数据库的连接:

  • 定义访问数据库的用户名和密码(通常是DB在安装过程中预定义admin用户)
  • 在代码中创建一个connection string,以使用上述凭据(例如用户名和密码)连接数据库
  • 针对数据库执行操作(主要是查询)

因此,将connection string暴露在客户端JS中将(最终)导致某人具有对您的数据库的访问权限。

“良好情况” (非常糟糕)中,用户将没有管理员权限,因此潜在的损害将受到限制(读取敏感信息,删除记录或仅创建虚假记录)搞乱您的数据)。

“最坏的情况” 中,攻击者将能够以管理员权限访问您的数据库,更改用户密码(从而将您锁定),并将整个数据库移交给自己或只是”听您的数据库并获取更新的数据(如水le)

这就是为什么我们使用服务器端代码来处理数据库连接和操作

答案 1 :(得分:0)

            //HTML file
            <!DOCTYPE html>
            <html>
            <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
            </head>
            <body>

            <p>Get GPS Location Every 5 seconds</p>

            <p id="coordinates"></p>

            <body onload="getLocation()"> 

            <script>
            var x = document.getElementById("coordinates");

            function getLocation() {
              if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(showPosition);
                setTimeout(getLocation, 5000);
              } else { 
                x.innerHTML = "Geolocation is not supported by this browser.";
              }
            }

            function showPosition(position) {
            $.ajax({
                    url: "./path/to/php/file.php",
                    type: "post",
                    data: { lat: position.coords.latitude, long: position.coords.longitude},
                    success: function (data) {
                      var dataParsed = JSON.parse(data);
                      console.log(dataParsed);
                    }
                  });
            }
            </script>

            </body>
            </html>

        //Php File

<?php

    //Create connection
  $connection = mysqli_connect('localhost', 'root', '', 'dbase');
    if($_POST['lat'] && $_POST['long']){
      $lat = $_POST['lat'];
      $long = $_POST['long'];

      $q = "INSERT INTO location (lat, long) VALUES ('$lat', '$long')";

      $query = mysqli_query($connection, $q);

      if($query){
          echo json_encode("Data Inserted Successfully");
          }
      else {
          echo json_encode('problem');
          }
      }

?>