0

postjqueryリクエストで要素を削除しようとしています:

$(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));

    }

2つのメッセージが表示されます..1つはエラーでもう1つは削除です...私が避けたいもう1つのことは、誰かがIDをコントローラータスクに投稿することです..レコードを1つずつ自動的に削除します。回避する方法はありますかこれも?

4

3 に答える 3

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');
}

コメントがそうすべきだと言っている場所でユーザーを検証し、別のDBへの移植性を高めることができる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 に答える
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 に答える