我试图在codeigniter中写一个UPDATE查询但是由于某种原因它插入了一个带有默认值的新记录

时间:2015-09-11 16:36:44

标签: php mysql codeigniter

我正在尝试更新现有邮件。消息具有message_id,类别,主题和消息。单击编辑后,将进行AJAX调用...

这是来自.js文件(VIEW)的AJAX调用

if(checkEditMessage()){  // checkEditMessage is to check for validation
            console.log("EDIT");
            var cat_id = $("#cat_id").val();
            var commentsubject = $("#commentsubject").val();
            var chat_post_message = $("#chat_post_message").val();
            $.ajax({
                 url: base_url + "chat/editMessage",
                 async: false,
                 type: "POST",
                 data: { 
                    "v_id" : id,
                    "v_cat_id" : cat_id,
                    "v_commentsubject" : commentsubject,
                    "v_chat_post_message" : chat_post_message
                },
                error: function(err){
                    console.log(err);
                },
                 success: function (result) {
                     console.log(result);
                 }
             });
        }

这是我的chat.php(CONTROLLER)

function editMessage(){
    $posted_data = $this->input->post();
    if(isset($posted_data) && !empty($posted_data))
    {
        $id = $posted_data['v_id'];
        $cat_id = $posted_data['v_cat_id'];
        $commentsubject = $posted_data['v_commentsubject'];
        $chat_post_message = $posted_data['v_chat_post_message'];
        $data = $this->chat->updateMessage($id, $cat_id, $commentsubject, $chat_post_message);
        echo $data;
    }
}

这是我的(模特)

function updateMessage($id, $cat_id, $commentsubject, $chat_post_message){
    $data=array('cat_id'=>$cat_id,'subject'=>$commentsubject,'message'=>$chat_post_message);
    $this->db->where('message_id',$id);
    $this->db->update('chat_message',$data);
    $err = $this->db->_error_message();
    if(empty($err))
    {
        return "EDIT COMPLETE";
    }
    return false;       
}

3 个答案:

答案 0 :(得分:0)

您的问题并不完全清楚,因为我没有看到任何insert,并且为了插入它,您的查询中确实需要insert子句。我只能告诉你一些你可能想要做的改进。

您使用的是codeigniter的哪个版本?因为我没有看到你使用必然的_model这个词。

$message['v_id']                = $posted_data['v_id'];
$message['v_cat_id']            = $posted_data['v_cat_id'];
$message['v_commentsubject']    = $posted_data['v_commentsubject'];
$message['v_chat_post_message'] = $posted_data['v_chat_post_message'];
// `chat_model` and not `chat`
$result = $this->chat_model->updateMessage($message['v_id'], $message);

另一方面,您在模型函数中需要做的只是

public function updateMessage($id, $data)
{
   $this->security->xss_clean($data);
   $this->db->where('message_id', $id)
            ->update('chat_message', $data);

   return empty($this->db->_error_message());
}

答案 1 :(得分:0)

在你的ajax改变这个

  url: "<?php echo base_url() ?>chat/editMessage",
  async: false,// remove this
  data: { 
       "v_id : id,
       v_cat_id : cat_id,
       v_commentsubject : commentsubject,
       v_chat_post_message"} ,

,您的模型和控制器看起来不错

答案 2 :(得分:0)

您可以尝试以下操作:

  • 确保您的message_id已正确发布。即echo $posted_data['v_id'];中的editMessage(),以查看是否收到了正确的值。

  • 确保您尝试更新的ID 存在,并且数据库中的message_id PRIMARY KEY 字段。