我正在尝试使用post jquery request删除元素:
$(function(){
//The element
// <a data-id="39" data-toggle="modal" href="#delete"><i class="icon-trash"></i>
Delete</a>
$('.delete').on('click',function(){
var id= $(this).attr('data-id');
$.post('task/delete', { id: id }, function(data) {
alert('Task deleted!');
})
.success(function(){ alert('Task deleted!'); })
.complete(function(){ alert('Task completed!'); })
.error(function(){ alert('Error was found!'); });
})
});
我的控制器被称为任务,其中的功能称为删除。
class Task extends CI_Controller {
public function delete()
{
$this->load->model('tasks_model','task_delete');
$this->task_delete-> deleteTask($_POST['id']);
}
}
该模型非常简单..它只是删除记录。
public function deleteTask($task_id)
{
$task_id = mysql_real_escape_string($task_id);
$this->db->query("DELETE FROM tasks WHERE task_id = ?", array($task_id));
}
我收到两条消息..一个是错误,一个是删除... 我想要避免的另一件事是有人将id发送到控制器任务..这将自动逐个删除记录,有没有办法避免这种情况?
答案 0 :(得分:1)
您还没有在控制器中使用过该功能名称:
$this->task_delete->deleteTask($id);
答案 1 :(得分:1)
为避免有人发布所有ID并删除所有任务,您应该只删除属于该用户的任务。
我猜你保存每个任务,因此它属于特定用户,对吧?因此,在您的删除查询中,您可以使其运行DELETE WHERE task_id = {task_id} AND user_id = {user_id}。 user_id是您在会话中保存的内容。
作为旁注,在运行数据库查询时,您可以绑定参数,这意味着CI负责使参数安全。因此,您可以将上面的查询修改为:
$this->db->query("DELETE FROM tasks WHERE task_id = ?", array($task_id));
您可以在此处详细了解:http://codeigniter.com/user_guide/database/queries.html位于底部(查询绑定部分)。
至于你同时收到错误和成功消息的错误,可能会出现一些不同的错误。复制代码时我不确定是否出现了问题,但PHP代码中有错误:
$this->load->model('tasks_model','task_delete');
$this->task_delete($id);
应该是:
$id = $this->input->post('id'); // the data is posted, it won't be passed in as an argument to the controller function
$this->load->model('tasks_model','task_delete');
$this->task_delete->deleteTask($id);
你的查询似乎也有错误,所以按照我上面提到的那样做更好。
答案 2 :(得分:1)
你的控制器方法看起来应该是这样的
public function delete()
{
// Do user validation here
$this->load->model('tasks_model');
$this->tasks_model->task_delete($this->input->post('id'));
return "task deleted";
}
你模拟这样的方法
public function task_delete($task_id)
{
$this->db->where('task_id', $task_id);
$this->db->delete('tasks');
}
正如我建议验证评论所说的用户,并使用CI的活动记录库,您可以在其中增加对不同数据库的可移植性。
修改强>
显示PHP错误(如果打开它们可能会出现MySQL错误)。
error_reporting(E_ALL);
要确保删除任务,请执行此操作(效率不高)。
public function task_delete($task_id)
{
$this->db->where('task_id', $task_id);
$this->db->delete('tasks');
$this->db->from('tasks');
$this->db->where('task_id', $task_id);
$query = $this->db->get();
if ( $query->num_rows() > 0 )
{
return FALSE;
}
else return TRUE;
}
然后在控制器中使用返回的布尔值做一些事情。