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

Javascript 尝试使用php和angular执行删除时出现的问题,javascript,php,angularjs,angular-material,Javascript,Php,Angularjs,Angular Material,我正在尝试使用angular和php执行删除。我非常确信我的php是正确的 但我无法删除。在我的控制台日志中,它说我的删除成功了,但是当查看表时,我仍然看到重新编码的代码 在chrome中使用调试器进行进一步检查后,我发现dat我的参数索引未定义-> 我的HTML代码的一部分: <md-button class="md-primary" ng-click="delete_task(task.id)">Delete</md-button> 我的PHP代码的一部分: &l

我正在尝试使用angular和php执行删除。我非常确信我的php是正确的

但我无法删除。在我的控制台日志中,它说我的删除成功了,但是当查看表时,我仍然看到重新编码的代码

在chrome中使用调试器进行进一步检查后,我发现dat我的参数索引未定义->

我的HTML代码的一部分:

<md-button  class="md-primary" ng-click="delete_task(task.id)">Delete</md-button>
我的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_任务方法。为了成功,我建议您获取调用file\u get\u co的变量ntentsphp://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 
   }
 ?>

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

如果缺少索引,则您的参数task.id可能是错误的。打印出来,看看它的价值是什么。您也可以通过调用$scope.delete\u task(一个已知的id)在作用域中手动触发删除,并查看它是否有效。如果是这样的话,那么函数和后端都是正常的,并且您的参数是wrong@RainerPlumer,我只添加了$scope.delete_task100;在我的删除功能之后?当我在delete函数中记录我的索引时,它会显示,但会不断重复->是的,然后…如果删除按预期工作,那么您知道您的task.id是问题所在,其余的工作正常。请稍候,当我像so console.logindex那样记录索引时;它显示了它的undefined->一旦你硬编码了测试值,它就不应该说undefined。确保浏览器缓存已禁用,angular正在重新加载模板/代码。此外,代码中更严重的错误实际上是从tblTask中删除$del=mysql\u queryDELETE,其中id=.$index;永远不要将这样的变量传递到查询中……即使是初学者黑客也可以相当容易地清除数据库。使用mysql\u real\u escape\u字符串或typecast转换为int
<?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 
   }
 ?>