2016-11-16 17 views
0

以下のコードは、コントローラーに余分なステートメントを追加するときにのみデータを削除します。何故ですか?データベースを処理する正しい方法は何ですか?

私はわずか数ヶ月前からcodeigniterを使用していましたが、私はこのような変なバグに悩まされ続けています。

これはモデルファイルである:

My_model.php

function delete_data($where=array()) 
{ 
    return $this->db->delete('table1', $where); 
} 

コントローラでコード:

tasks.php

function do_delete_data() 
{ 
    $this->load->model('My_model'); 
    $result = array('status' => '', 'message' => ''); 
    try 
    { 
    $this->db->trans_begin(); 
    $id = $this->input->post('post_id', TRUE); 
    if (! $this->My_model->delete_data(array('id' => $id))) 
    { 
     throw new Exception('Database process failed.'); 
    } 
    $result['message'] = $this->db->last_query(); // extra statement 
    $this->db->trans_commit(); 
    $result['status'] = 1; 
    } 
    catch(Exception $e) 
    { 
    $this->db->trans_rollback(); 
    $result['message'] = $e->getMessage(); 
    } 

    if ($this->input->is_ajax_request()) 
    { 
    echo json_encode($result); 
    } 
} 

それ

display.php

$.ajax({ 
    url: '/tasks/do_delete_data', 
    type: 'post', 
    data: { 
    'post_id' : $('#post_id').val(), // e.g. 12 
    }, 
    dataType: 'json', 
    success: function(response) { 
    alert('File deleted successfully.'); 
    console.log(response); 
    }, 
    error: function(e) { 
    alert('an error occurred.'); 
    } 
}); 
+0

私は '$ _POST'で' $ id'を使う必要があります – devpro

+0

@devpro申し訳ありませんが、メモリからこの質問を書いていて、コードが間違っていることを確認した後、コードを編集しました。どうかしてみてください – dapidmini

+0

はい、間違ったインデックス名を使用しています。 '$ id = $ this-> input-> post( 'post_id'、TRUE);' '$ id = $ this-> input-> post 'id'、TRUE); 'print_r($ this-> input-> post())'で余分な文を置き換えたときに、コントローラの – devpro

答えて

1

あなたはAjaxのPARAMでidを使用しますが、未定義の指標である、あなたのコントローラ、のようにpost_idを使用している:私はこのようなAJAXを経由してこの関数を呼び出そうとしました最近まで正常に動作します。あなたが理解するだろうそれはあなたがprint_r($_POST)これを使用することによって、コントローラに何を得ているチェックすると良いでしょう、あなたはAjaxデータから配列の種類を取得している

$id = $this->input->post('id', TRUE); // use id 

:としてあなたのインデックス名を修正する必要が

関連する問題