0

我正在尝试使用 post jquery 请求删除元素:

$(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 发布到控制器任务..这将自动删除记录,有没有办法避免这个也是?

4

3 回答 3

1

您还没有在控制器中使用函数名称,它应该是:

$this->task_delete->deleteTask($id);
于 2012-04-16T11:47:35.477 回答
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);

而且您的查询似乎也有错误,因此最好按照我上面提到的方式进行。

于 2012-04-16T11:50:55.020 回答
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;
}

然后对控制器中返回的布尔值做一些事情。

于 2012-04-16T11:53:26.883 回答