簡體   English   中英

如何每x分鍾將GPS位置發送到mysql表

[英]How to send GPS location to mysql table every x minutes

我正在編寫一些代碼,每 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>

簡而言之:

您應該使用服務器端而不是使用從客戶端JS到您的數據庫的直接訪問

深入:

首先,讓我們同意你的數據庫是你有價值,你要保持它作為保護越好

其次,讓我們也同意客戶端代碼(尤其是JS )容易受到攻擊,並且可能是潛在攻擊者攻擊的理想場所。

完成所有設置后,讓我們定義如何創建與數據庫的連接:

  • 定義訪問DB的用戶名和密碼(通常DB在安裝時預先定義一個admin用戶)
  • 在您的代碼中創建一個connection string以使用上述憑據(例如用戶名和密碼)連接數據庫
  • 對數據庫執行操作(主要是查詢)

因此,在客戶端 JS 中公開您的connection string ,將導致(最終)有人有權訪問您的數據庫。

“好情況” (這很糟糕)中,用戶將沒有管理員權限,因此潛在的損害將受到限制(讀取敏感信息、刪除記錄或只是創建虛假記錄來破壞您的數據)。

“糟糕的情況”中,攻擊者將能夠以管理員權限訪問您的數據庫,更改用戶密碼(從而將您鎖定)並將整個數據庫歸為己有,或者“只是”監聽您的數據庫並獲取更新的數據(像螞蟥一樣)

這就是為什么我們使用服務器端代碼來處理數據庫連接和操作

            //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');
          }
      }

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM