Javascript 控制台中显示但不在输入字段中显示的输入字段值+;无法保存到数据库

Javascript 控制台中显示但不在输入字段中显示的输入字段值+;无法保存到数据库,javascript,php,angularjs,material-design,Javascript,Php,Angularjs,Material Design,我正在处理angular和angular材质(材质设计)依赖项 我有一个主网格,当我点击它时,将创建一个磁贴,当我点击该磁贴时,将出现一个弹出窗口。在该弹出窗口中,是一个具有2个输入字段的表单,该字段应显示平铺的x和y坐标。这些值不会显示在输入字段中,但会显示在我的控制台中 我试图实现的是能够将这些坐标保存到数据库中。由于某种原因,当我点击save时,它不会被保存到我的数据库中 以下是我的弹出框代码: <form ng-controller="AppCtrl">

我正在处理angular和angular材质(材质设计)依赖项

我有一个主网格,当我点击它时,将创建一个磁贴,当我点击该磁贴时,将出现一个弹出窗口。在该弹出窗口中,是一个具有2个输入字段的表单,该字段应显示平铺的x和y坐标。这些值不会显示在输入字段中,但会显示在我的控制台中

我试图实现的是能够将这些坐标保存到数据库中。由于某种原因,当我点击save时,它不会被保存到我的数据库中

以下是我的弹出框代码:

<form ng-controller="AppCtrl">

          <div layout="row">
              <input type="text" id="coord_x" name="coordinate_x" value="" ng-model="task_coordinate_x" >
              <input type="text" id="coord_y" name="coordinate_y" value="" ng-model="task_coordinate_y">
          </div>
</form>
这是我的php代码:

<?php 
    include('config.php');

    switch($_GET['action'])  {

        case 'add_task' :
            add_task(); 
            break;
    }


    /**  Function to add a task to db **/
    function add_task() {
        $data = json_decode(file_get_contents("php://input")); 
        $task_coordinate_x            = $data->task_coordinate_x;
        $task_coordinate_y            = $data->task_coordinate_y;

        print_r($data);

    $qry = 'INSERT INTO tblTask(task_coordinate_x, task_coordinate_y) 
                VALUES ("' 
                . $task_coordinate_x . '","' 
                . $task_coordinate_y . '")';

        echo ($qry);

        $qry_res = mysql_query($qry);
        if ($qry_res) {
            $arr = array('msg' => "Task added successfully!!!", 'error' => '');
            $jsn = json_encode($arr);
            // print_r($jsn);
        } 
        else {
            $arr = array('msg' => "", 'error' => 'Error in inserting record');
            $jsn = json_encode($arr);
            // print_r($jsn);
        }
    }
?>

我认为问题可能发生在php中

在地址栏中键入:

创建一个php函数

 switch($_GET['action'])  {

        case 'debug' :
            debug(); 
            break;
    }

function debug() {

$qry = 'INSERT INTO tblTask(task_coordinate_x, task_coordinate_y) 
            VALUES ("' 
             some value '","' 
            some value '")'
    or trigger_error("Query Failed! SQL: $sql - Error: ".mysqli_error(), E_USER_ERROR

);}
并确保其工作正常


我希望它能有所帮助。

您无法在函数中访问全局变量(在本例中是您的DB连接),这就是您无法将数据插入数据库的原因。请在下面找到PHP代码并进行更新,我希望它能为您工作

对我来说,这是完美的工作

<?php

class createCon  {
    var $host = 'localhost';
    var $user = 'root';
    var $pass = 'root';
    var $db = 'tblTask';
    var $myconn;

    public function connect() {
        $con = mysqli_connect($this->host, $this->user, $this->pass, $this->db);
        if (!$con) {
            die('Could not connect to database!');
        } else {
            $this->myconn = $con;
            //echo 'Connection established!';
        }   
        return $this->myconn;
    }

    public function close() {
        mysqli_close($myconn);
        echo 'Connection closed!';
    }

}


$connection = new createCon();
$connection->connect();


if($_GET['action'] == 'add_task'){

    $data = json_decode(file_get_contents("php://input"));         
    $task_coordinate_x  = $data->task_coordinate_x;
    $task_coordinate_y  = $data->task_coordinate_y;    

    $qry = 'INSERT INTO tblTask(task_coordinate_x, task_coordinate_y) 
            VALUES ("' 
            . $task_coordinate_x . '","' 
            . $task_coordinate_y . '")';

    if ( mysqli_query($connection->myconn, $qry)) {       
        echo "Success";
    } else {
        echo "Fail";      
    }    
}

?>


如果您有任何疑问,请让我知道

这是PHP代码中的问题,您没有正确使用关联数组。您还对angular的
.post().error()
方法有很大的误解

$task_coordinate_x            = $data->task_coordinate_x;
$task_coordinate_y            = $data->task_coordinate_y;
应该是

$task_coordinate_x            = $data['task_coordinate_x'];
$task_coordinate_y            = $data['task_coordinate_y'];
这就是为什么您的后端是空的/没有返回任何内容。我已经通过这个测试验证了这一点:

<?php
$array = ['test' => 'testval'];
echo $array->test;
?>
另一个非常有用的建议是对
$qry\u res=mysql\u query($qry)
行执行某种类型的错误检查。如果查询失败,将该错误消息连接到$response['message'](在函数中确保声明
global$response
),(另一个非常有用的PHP调试技术是)

现在有了这个响应,我们可以通过检查data.success来使用angular查看任务是否成功完成,如下所示:(数据是来自PHP的响应,现在格式更好了JSON)

您对
.post().error()
方法也有很大的误解。这将在HTTP/POST请求失败时执行,而不是在PHP成功与否时执行,请参阅如何让angular实际检测PHP是否成功:

.success(function(data, status, headers, config) {
    console.log(data.message);
    if(data.success){
        // query was successful
    }
    else {
        // query was unsuccessful
    }
})
.error(function(data, status, headers, config) {
    console.log("Failed to reach PHP file or recieve response");
});

希望这有帮助

由于继承性和适当的样式,我建议将坐标变量存储在对象
coordinates.x
coordinates.y
中。我也会在那里初始化它们。你调查过失败的地方吗?您的服务器是否获取了变量,或者它们在
保存任务
方法中不可用?@enpenax,这就是发生的情况->您可以删除print\u r()命令并重试吗?我不完全确定这一点,但PHP不会在print_r()之外执行,如果它被称为希望它确实会有帮助,因为现在我只得到一个空白页抱歉,我想你误解了我。你的代码对我到底有什么帮助,因为当我现在使用它时,我只得到一个空白页…哦,好的@GY22。。。我只想通过调试mysqli连接并使用die()查询以打印错误报告来填充您的空白页。。。确保php脚本中没有错误……不,php中没有错误,因为在表单中,我有其他输入字段保存到db中,但出于此解释的目的,我将它们注释掉,而不是将它们粘贴到上面的代码中。因此,我知道一个事实,php工作我放弃了整个php工作,决定使用node和mongo(因此首先,这对我来说工作起来容易得多)。但无论如何谢谢你的帮助reply@GY22您说您切换到了node,我希望您能早点看到这一点,因为这是对php关联数组的误解。我认为,如果你对输入进行了一些回音,你就会看到它在
$data->task\u cordinate\u x
中失败了,调试从一开始就开始,确保没有任何假设,这一点很重要。我想说node是一个很酷的新事物,但是切换通常是非常痛苦的,特别是当您必须重构一个大型后端时。我试过切换,节点实际上要复杂得多。众所周知,PHP是最简单的。祝你好运
$qry_res = addtask();
$response = [];
if($qry_res){
    $response['success'] = true;
    $response['message'] = "Task added successfully";
}
else {
    $response['success'] = false;
    $response['message'] = "Task not added";
}
echo json_encode($response);
.success(function(data, status, headers, config) {
    console.log(data.message);
    if(data.success){
        // query was successful
    }
    else {
        // query was unsuccessful
    }
})
.error(function(data, status, headers, config) {
    console.log("Failed to reach PHP file or recieve response");
});