【问题标题】:AJAX inserting NULL values into MYSQLAJAX 将 NULL 值插入 MYSQL
【发布时间】:2019-04-28 13:23:38
【问题描述】:

我的 HTML 脚本收集纬度和经度并通过 ajax 将它们发送到另一个 PHP 脚本,该脚本将这些值插入 mysql,问题是 AJAX 将 NULL 值插入表中。它为纬度和经度插入“0.000000”值,纬度和经度是数据库中的 float(10,6) 类型,如互联网所述,用于 gps 坐标的最佳实践。我显然是新开发人员,请帮助 -- HTML 脚本

<!DOCTYPE html>
<html>
  <head>
    <title>AJAX DATABASE</title>

    <script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
    <script type="text/javascript" charset="utf-8">



    /*/ Wait for Cordova to load
    /*/
    document.addEventListener("deviceready", onDeviceReady, false);

    var watchID = null;

    // Cordova is ready
    //

    function onDeviceReady() {
        // Throw an error if no update is received every 30 seconds
        var options = {enableHighAccuracy:true, timeout: 3000, maximumAge:0};
        watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);

    }


    // onSuccess Geolocation
    //
    function onSuccess(position) {    


        var latitude = document.getElementById("lat");
        latitude.innerHTML = position.coords.latitude;
        var longitude = document.getElementById("longitude");
        latitude.innerHTML = position.coords.latitude;
        insertDB(position.coords.latitude,position.coords.latitude);
    }

    // onError Callback receives a [PositionError](PositionError/positionError.html) object
    //
    function onError(error) {
        alert('code: '    + error.code    + '\n' +
              'message: ' + error.message + '\n');
    }

    // onError Callback receives a PositionError object
    //
    function onError(error) {
        alert('code: '    + error.code    + '\n' +
              'message: ' + error.message + '\n');
    }

    // Options: throw an error if no update is received every 30 seconds.
    //
    var watchID = navigator.geolocation.watchPosition(onSuccess, onError, { timeout: 30000 });




    // Sends latitude & longitude value to php script and alerts on success

    function insertDB(latitude, longitude){
        var xttp = new XMLHttpRequest();
        xttp.onreadystatechange = function(){
            if(this.readyState == 4){
                document.getElementById('longitude').innerHTML = 
                this.responseText;
                alert("state changed by ajax")
            }

        }
        xttp.open("GET", "ConnectTest.php? 
         latitude="+latitude+"&longitude="+longitude, true);
        xttp.send();
    }




    </script>


  </head>
  <body>

    <p id="lat"></p><br>
    <p id="longitude"></p>
  </body>
</html>

和 PHP --

<?php 


    //POST VARIABLES


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

    //ESTABLISH CONNECTION 

    $servername = "localhost:3306";
    $user = "client";
    $pass = "sonic_client";

    $db_name = "sonicstrains";

    $server = mysqli_connect($servername, $user, $pass, $db_name);




    $sql = "SELECT * FROM 'users' WHERE 'latitude' = ".$two;

    $result = mysqli_query($server, $sql);

    if(!isset($_GET['latitude'])){
        echo "Nothing is set";

    }

    if(!$server){

        die("Connetion error".mysqli_connect_error());

    }else{

        if (!$result){

            $insert = "INSERT INTO users (latitude, longitude) VALUES ('$one', '$two')";
            mysqli_query($server, $insert);
            echo "Coordinates Inserted";

        }
    }


?>

【问题讨论】:

  • 您将参数放在 URL 中,这意味着您需要使用$_GET 来访问它们。在这种情况下,您在代码中使用 POST 的事实无关紧要。 POST 参数总是放在请求的正文中,你是 send()ing 一个空的正文。您还应该查看fetch,这将使您的过时代码更简单。
  • 不确定是什么问题。你想要0.0000?你想要空吗?
  • 帮了大忙,但我的经度由于某种原因没有发布。仍然发布 0.000,知道为什么吗?我将 php 中的两个参数都更改为 $_Get['foo']
  • @SonicStrains 您在函数 insertDB(latitude) 中仅传递纬度值。您需要同时传递纬度和经度值函数 insertDB(latitude, longitude)
  • 我更新了函数以包含经度,但只有纬度仍在发布

标签: javascript mysql ajax


【解决方案1】:

将 xttp 打开和发送功能替换为以下:

    xttp.open("POST", "ConnectTest.php, true);
    xttp.send(latitude="+latitude+"&longitude="+longitude);

【讨论】:

  • 您的解决方案使脚本停止插入值,如果有效,请发布您的代码。使用 URL 发布值有效,但由于某种原因,只有我的经度没有更新。 (使用上面的代码)
  • 还是不行,只有纬度发到mysql了
  • 我猜你在 PHP 中从 $_POST 更改为 $_GET。所以,现在两个文件中都有多个不匹配。首先,要么使用 Get,然后将 xttp.open('POST' 更改为 xttp.open('GET' 和第二个在 sql 查询中,您在 where 子句中传递经度值而不是 latitude 和,第三个将 isset 更改为 $_GET
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多