Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在使用Google Maps geocoder时首先检查php语句_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript 如何在使用Google Maps geocoder时首先检查php语句

Javascript 如何在使用Google Maps geocoder时首先检查php语句,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我正在尝试制作一个函数,允许用户将开始和结束坐标添加到数据库中。问题是,我得到一个错误,即未定义几何体 我做了一些检查,我意识到该函数甚至没有检查php语句以查看$\u POST['start']和$\u POST['end']变量是否为空 下面是我的PHP函数,用于检查是否缺少任何字段 $error = ""; if (!$_POST['start']) { $error = "Start point is missing."; } else if (!$_

我正在尝试制作一个函数,允许用户将开始和结束坐标添加到数据库中。问题是,我得到一个错误,即未定义几何体

我做了一些检查,我意识到该函数甚至没有检查php语句以查看$\u POST['start']和$\u POST['end']变量是否为空

下面是我的PHP函数,用于检查是否缺少任何字段

$error = "";

    if (!$_POST['start']) {
        $error = "Start point is missing.";

    } else if (!$_POST['end']) {
        $error = "End point is missing.";

    } else if (!$_POST['date']) {
        $error = "Date is missing.";

    if ($error != "") {

        echo $error;
        exit();

    } else {
        $query = "INSERT INTO offer (start, end, date, startLng, startLat, endLng, endLat) VALUES ('".mysqli_real_escape_string($link, $_POST['start'])."', '".mysqli_real_escape_string($link, $_POST['end'])."', '".mysqli_real_escape_string($link, $_POST['date'])."', '".mysqli_real_escape_string($link, $_POST['startLng'])."', '".mysqli_real_escape_string($link, $_POST['startLat'])."', '".mysqli_real_escape_string($link, $_POST['endLng'])."', '".mysqli_real_escape_string($link, $_POST['endLat'])."')";

        mysqli_query($link, $query);

        echo 1;
    }
每当用户按下模式内的按钮时,它应该启动负责获取开始和结束坐标的功能

$("#addNewModal").click(function() {
    getStartCoordinates();
})
function getStartCoordinates() {

    geocoder.geocode({
        'address': $("#start").val()
    },

        function(result, status) {
            if (status = google.maps.DirectionsStatus.OK){

                startLng = result[0].geometry.location.lng();
                startLat = result[0].geometry.location.lat();
                getStartCoordinates();

            } else {

                getEndCoordinates();
            }
    }             
    );
}

function getEndCoordinates() {

    geocoder.geocode({
        'address': $("#end").val()
    },

        function(result, status) {
            if (status = google.maps.DirectionsStatus.OK){

                endLng = result[0].geometry.location.lng();
                endLat = result[0].geometry.location.lat();
                addRequest();    

            } else {

                addRequest();    
            }
    }             
    );
}
以下是获取起点和终点坐标的函数

$("#addNewModal").click(function() {
    getStartCoordinates();
})
function getStartCoordinates() {

    geocoder.geocode({
        'address': $("#start").val()
    },

        function(result, status) {
            if (status = google.maps.DirectionsStatus.OK){

                startLng = result[0].geometry.location.lng();
                startLat = result[0].geometry.location.lat();
                getStartCoordinates();

            } else {

                getEndCoordinates();
            }
    }             
    );
}

function getEndCoordinates() {

    geocoder.geocode({
        'address': $("#end").val()
    },

        function(result, status) {
            if (status = google.maps.DirectionsStatus.OK){

                endLng = result[0].geometry.location.lng();
                endLat = result[0].geometry.location.lat();
                addRequest();    

            } else {

                addRequest();    
            }
    }             
    );
}
以及用于addCoordinates.php函数的AJAX

function addRequest() {


    $.ajax({
        type: "POST",
        url: "addCoordinates.php",
        data: "start=" + $("#start").val() + "&end=" + $("#end").val() + "&date=" + $("#date").val() + "&startLng=" + startLng + "&startLat=" + startLat + "&endLng=" + endLng + "&endLat=" + endLat,
        success: function(result) {

            if (result == "1") {

                $("#alertSuccess").show();

            } else {

                $("#addAlert").html(result).show();
            }

        }
    })

}
我的发现:

  • 由于没有在任何输入中输入值,我得到的错误为 几何体未定义
  • 如果我在开始和结束字段中都输入了值,那么最终得到的php响应是
    $error=“Date丢失。”
  • 我可以通过将if语句添加到#addNewModal click函数中,检查是否输入了开始/结束字段的两个值来修复该错误

  • 因此,主要的问题是如何首先检查PHP响应,以便同时获得
    $error=“Start point is missing.”
    $error=“缺少终点。”来自我的PHP函数的响应。

    在尝试使用google geocoder之前,您需要检查您的值(这就是未定义
    几何体的地方
    错误的来源)。对click事件执行一些简单的客户端验证可以防止此错误,并提供一些关于如何继续的有用提示。大概是这样的:

    function addRequest() {
    
    
        $.ajax({
            type: "POST",
            url: "addCoordinates.php",
            data: "start=" + $("#start").val() + "&end=" + $("#end").val() + "&date=" + $("#date").val() + "&startLng=" + startLng + "&startLat=" + startLat + "&endLng=" + endLng + "&endLat=" + endLat,
            success: function(result) {
    
                if (result == "1") {
    
                    $("#alertSuccess").show();
    
                } else {
    
                    $("#addAlert").html(result).show();
                }
    
            }
        })
    
    }
    
    $("#addNewModal").click(function() {
        if (validateInputs()) {
            getStartCoordinates();
        } else {
            alert('Please verify start location, end location, and date fields are set');
        }
    });
    
    function validateInputs() {
        return $("#start").val() && $("#end").val() && $("#date").val();
    }
    
    function getStartCoordinates() {
        geocoder.geocode({
            'address': $("#start").val()
            },
            function(result, status) {
                if (status = google.maps.DirectionsStatus.OK){
                    startLng = result[0].geometry.location.lng();
                    startLat = result[0].geometry.location.lat();
                    // getStartCoordinates(); // This likely shouldn't be here.
                }
                getEndCoordinates();
            }
        );
    }
    
    function getEndCoordinates() {
        geocoder.geocode({
                'address': $("#end").val()
            },
            function(result, status) {
                if (status = google.maps.DirectionsStatus.OK){
                    endLng = result[0].geometry.location.lng();
                    endLat = result[0].geometry.location.lat();
                }
    
                addRequest();
            }
        );
    }
    
    一旦您能够将表单中的正确数据提交到服务器端/PHP函数,您应该立即从服务器返回所有错误。这应该只是将错误附加在一起并提示用户。更改php函数应该是这样工作的:

    $error = "";
    
    if (!$_POST['start']) {
        $error .= "Start point is missing. ";
    }
    
    if (!$_POST['end']) {
        $error .= "End point is missing. ";
    }
    
    if (!$_POST['date']) {
        $error .= "Date is missing. ";
    }
    
    if ($error != "") {    
        echo $error;
        exit();   
    } else {
        $query = "INSERT INTO offer (start, end, date, startLng, startLat, endLng, endLat) VALUES ('".mysqli_real_escape_string($link, $_POST['start'])."', '".mysqli_real_escape_string($link, $_POST['end'])."', '".mysqli_real_escape_string($link, $_POST['date'])."', '".mysqli_real_escape_string($link, $_POST['startLng'])."', '".mysqli_real_escape_string($link, $_POST['startLat'])."', '".mysqli_real_escape_string($link, $_POST['endLng'])."', '".mysqli_real_escape_string($link, $_POST['endLat'])."')";
    
        mysqli_query($link, $query);
    
        echo 1;
    }
    

    执行此操作的典型方法是从服务器返回多个错误。这应该仅仅意味着从
    else if(!$\u POST['end']){
    else if(!$\u POST['date']){
    中删除else,然后使用诸如:`$error.=“端点丢失了”;
    。然后服务器将报告
    $error=“起点丢失了。端点丢失了。”;它应该更好地向用户指出问题。这是个好主意。但是,它仍然无法解决我的问题。我认为这是因为它调用了getStartCoordinates()函数,而不检查是否输入了开始和结束输入,但这对我来说似乎很奇怪,因为我的PHP函数应该以$error响应。我想我对您的问题感到困惑。最后一点是,
    …如何首先检查我的PHP响应,以便同时获得$error=“start point is missing.”和$error=“端点丢失。”我的PHP函数的响应。
    很抱歉让它不那么清楚。我想说的是getStartCoordinates()#addNewModal内的函数。即使在模式内的开始和结束输入都为空时,也会执行click函数。这会导致几何体错误未定义,因为它无法根据空输入找到坐标。因此,我试图找到解决方案,以确保$_POST['start]和$_POST['end']在执行此getStartCoordinates()函数之前,将首先在PHP脚本中检查变量。哦,我刚才在更新中提到了这一点。这将是开始和结束文本输入的客户端验证。我建议更改
    $(“#addNewModal”)。单击
    检查
    如果($(“#开始”).val()&$(“#结束”).val()
    ,我会更新我的答案。是的,这就是我要找的。谢谢。