我正试图用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作为示例来测试端点。