使用Codeigniter中的Ajax更新数据库记录

时间:2016-01-20 17:22:22

标签: javascript php jquery ajax codeigniter

我正在尝试使用ajax响应中的ajax更新数据库记录,获取成功消息,但实际数据库记录根本没有更新。但它想知道ajax响应如何在查询未更新数据库时抛出成功消息。

查看:

// AJAX code to update the database
// update marks when form is submitted 
$('#updateMarks').on('submit',function(event) {
  event.preventDefault();
  var practical_mark = $("#mark_written").val();
  var written_mark   = $("#mark_practical").val(); 
  var comment        = $("#comment").val();
  var mark_id        = $("#mark_id").val();
  $.ajax({
    type: "POST",
    url: "<?php echo site_url('admin/exam_marks_update'); ?>",
    data: { practical_mark : practical_mark, 
           written_mark: written_mark, 
           comment : comment,
           mark_id : mark_id
          },
    success: function(response)
    {
      alert("success");
    },
    error: function(){
      alert("Error");
    },
  });
});
<?php foreach($marks as $row2): ?>
<form method="post" role="form" id="updateMarks">
  <tr>
    <td class="text-center"><?php echo $student['name']; ?></td>
    <td>
      <!-- create two col table for marks category -->
      <table class="table table-bordered table-hover toggle-circle">
        <thead>
          <tr>
            <th data-toggle="true" class="text-center"><?php echo get_phrase('written_exam'); ?></th>
            <th data-toggle="true" class="text-center"><?php echo get_phrase('practical_exam'); echo get_phrase('_(out_of_100)'); ?></th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td class="text-center"><input type="number" value="<?php echo $row2['written_mark_obtained'];?>" id="mark_written" name="mark_written" class="form-control"  /></td>
            <td class="text-center"><input type="number" value="<?php echo $row2['practical_mark_obtained'];?>" id="mark_practical" name="mark_practical" class="form-control"/></td>
          </tr>
        </tbody>
      </table>
      <!-- end create two col table for marks category -->
    </td>
    <td class="text-center"><textarea class="form_control" id="comment" name="comment" rows="4" > <?php echo $row2['comment'] ?> </textarea></td>
    <td class="text-center">
      <input type="hidden" id="mark_id" name="mark_id" value="<?php echo $row2['mark_id'];?>" />
      <button type="submit" class="btn btn-block btn-success btn-md"><i class="icon pe-pen" aria-hidden="true"></i><?php echo get_phrase('update'); ?></button>
    </td>
  </tr>
</form>
<?php endforeach; ?>

控制器:

function exam_marks_update(){
$data['written_mark_obtained']   = $this->input->post('written_mark');
$data['practical_mark_obtained'] = $this->input->post('practical_mark');
$data['comment']                 = $this->input->post('comment');
$this->crud_model->update_student_marks($data, $this->input->post('mark_id'));
}

MODEL

function update_student_marks($data, $mark_id){
$this->db->where('mark_id', $mark_id);
$this->db->update('mark', $data);
}

2 个答案:

答案 0 :(得分:0)

您的控制器检索不存在的输入...您需要将name, id作为输入而不是您回显的值...请参阅控制器:

function exam_marks_update(){
$data = array(
    'written_mark_obtained'   => $this->input->post('written_mark'),
    'practical_mark_obtained' => $this->input->post('practical_mark'),
    'comment'                 => $this->input->post('comment')
);
$this->db->where('mark_id', $this->input->post('mark_id'));
$this->db->update('mark', $data);
}

并改变这一点:

  var comment        = $("#comment").val();

  var comment        = $("#comment").html();

评论是textarea ......

答案 1 :(得分:0)

如果对服务器的请求成功,则始终调用Jquery ajax success回调函数。您需要从服务器返回响应数据以验证数据库操作何时成功。我编辑了你的代码,这可能适合你。

MODEL

 function update_student_marks($data, $mark_id){
      .....
      return $this->db->update('mark', $data);
    }

控制器::

  function exam_marks_update(){
      .....
      if($this->crud_model->update_student_marks($data, $this->input->post('mark_id'))){
       echo json_encode(array('success' => true));
       exit;
     } else {
      echo json_encode(array('success' => false));
      exit;
    }
 }

查看

 $.ajax({
        type: "POST",
        url: "<?php echo site_url('admin/exam_marks_update'); ?>",
        dataType :'json',
        data: { practical_mark : practical_mark, 
               written_mark: written_mark, 
               comment : comment,
               mark_id : mark_id
              },
        success: function(response)
        {
          if (response.success === true){
            alert("success");
          } else {
            alert('failed');
          }
        },
        error: function(){
          alert("Error");
        },
      });