尝试使用php和angular执行删除操作时出现问题


Issue trying to preform a delete with php and angular

我正试图用angular和php进行删除。我很确定我的php是正确的。

但是我不能删除。在我的控制台日志中,它说我的删除成功了,但当查看表时,我仍然看到记录。

在chrome中使用调试器进一步检查后,我看到数据我的参数索引未定义-> http://gyazo.com/88b6dcf9d4c03a1fc9dd235303b20a8f

我的HTML代码:

<md-button  class="md-primary" ng-click="delete_task(task.id)">Delete</md-button>

(part of) My app.js文件:

/** function to delete a task from list referencing php **/
        $scope.delete_task = function(index) {  
            debugger;
            $http.post('db.php?action=delete_task', 
                {
                    'task_index' : index
                }
            )      
            .success(function (data, status, headers, config) {   
                // here we also replace how to get the user
                getTaskFunction( 
                    /* success function */ 
                    function(data) { 
                        $scope.taskInfo = data; 
                       console.log("The taks have been reloaded" , $scope.taskInfo);
                    }, 
                    /* error function */ 
                    function() 
                    { 
                        alert("Server load failed"); 
                    } 
                );
                console.log('Deletion was succesfull');
            })
            .error(function(data, status, headers, config) {
               console.log("You were NOT succesfull in deleting a task"); 
            }
        );

我的PHP代码:

<?php
    include('config.php');
    switch($_GET['action'])  {
        case 'get_ProjectType_Info' :
            get_ProjectType_Info();
            break;
        case 'add_task' :
            add_task();
            break;
        case 'get_Location_Info' :
            get_Location_Info();
            break;
        case 'get_Task_Info' :
            get_Task_Info();
            break;
        case 'delete_task' :
            delete_task();
            break;
    }
    /**  Function to delete a task   **/
    function delete_task() {
        $data = json_decode(file_get_contents("php://input"));
        $index = $data->task_index;
        echo ($index);
        //print_r($data);
        $del = mysql_query("DELETE FROM tblTask WHERE id = ".$index);
        if($del)
        return true;
        return false;
    }

我不知道如何从现在开始。

最好不要将querystring变量与post变量一起使用,因为您正在这样做。在javascript语句中创建一个完整的对象,以便有这样的东西:

{
    'task_index' : index,
    action: 'delete_task'
 }

然后你应该威胁这个对象数据在你的交换机。

如果您采用一些使代码更清晰、更容易理解的实践,那就太好了。

首先,您应该测试您的delete_task方法。为了使它成功,我建议您将调用file_get_contents("php://input"))的变量获取到交换机中,并将它们作为方法参数传递。这样写:

<?php
   // ...
   // Receive id you have already collected
   function delete_task($task_id){        
    $del = mysql_query("DELETE FROM tblTask WHERE id = ".$task_id);
    if($del) return true;
    return false;
   }
   // test that method
   function test_delete(){
     $ret = delete_task(4);   // test with valid and invalid ids 
   }
 ?>

显然,这不是一种测试方法的好方法,你应该考虑使用任何测试框架进行单元测试。但是,以一种可以更改参数并观察其行为的方式构建方法是很重要的。一旦你确信这个方法(在这个场景中更关键的一个)是有效的,你可以在堆栈上向下一层,检查你的切换器是否工作良好。此时,您可以使用Postman for Chrome作为示例来测试端点。