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

Update Database Record with Ajax in Codeigniter

本文关键字:更新 数据库 记录 Ajax Codeigniter      更新时间:2023-09-26

我正在尝试从 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'));
}

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

如果

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

 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");
        },
      });

您的控制器正在检索不存在的输入...您需要将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();

由于评论是文本区域...