【问题标题】:Codeigniter - duplicated results after updateCodeigniter - 更新后重复的结果
【发布时间】:2020-03-05 03:43:01
【问题描述】:

我有一个添加学校学生分数的页面。提交学生成绩后,输入框会重新填充数据库中的结果。

这样做是为了

  1. 无法完成为学生添加分数的教师可以返回并从上次中断的地方继续。

  2. 如果要进行编辑,教师会知道要编辑的位置和内容。

  3. 通常用于修订目的。

但是,我注意到,当对特定学生进行编辑时,即使班上的每个人都已经获得了分数,该科目也会重复。

请参阅下图以了解我的意思。

我的模特:

public function addrn($data3) {
    $this->db->insert_batch('mtscores_rn', $data3);
    return $this->db->affected_rows(); 
}

我的控制器:

function assigngradeActionRNMT() 
{   
//var_dump(count($this->input->post('number')));         

for($i=0; $i<count($this->input->post('number')); $i++)
    {    
$data3[]=array(
'section_id' => $this->input->post('section_id'),
'subject_id' => $this->input->post('subject_id'),
'class_id' => $this->input->post('class_id')[$i],
'student_id' => $this->input->post('student_id')[$i],
'session_id' => $this->input->post('session_id'),
'mt_ca1' => $this->input->post('mt_ca1')[$i],
'mt_ca2' => $this->input->post('mt_ca2')[$i],
'mt_ca3' => $this->input->post('mt_ca3')[$i],
);
}

//var_dump($data3);

$inserted = $this->mtprimary_model->addrn($data3);
if($inserted > 0)
    {
$this->session->set_flashdata('msg', '<div class="alert alert-success">Grade Added successfully</div>');
//Echo back success json
redirect('admin/mtprimary/index');
    }
}

我的看法:

<?php foreach($students as $student){ ?>
<div class="row">
<div class="col-lg-3">
<div class="form-group">
<label>Student Name</label>
<input type="hidden" name="number[]"  value="">
<input type="hidden" name="section_id"  value="<?php echo $section_id; ?>">
<input type="hidden" name="session_id"  value="<?php echo $student->session_id; ?>">
<input type="hidden" name="student_id[]"  value="<?php echo $student->student_id; ?>">
<input type="hidden" name="class_id[]" value="<?php echo $class_id; ?>">
<input type="text"  value="<?php echo $CI->GetStudentNameWithID($student->student_id); ?>" class="form-control "  readonly>
</div>
</div>

<div class="col-lg-3">
<label>Class Expectation </label>
<textarea name="mt_ca1[]"  class="form-control"  rows="3"  ><?php echo $student->mtscores? $student->mtscores->mt_ca1: 0; ?></textarea>
</div>

<div class="col-lg-3">
<label>Milestone Achieved</label>
<textarea name="mt_ca2[]"  class="form-control"  rows="3"  ><?php echo $student->mtscores? $student->mtscores->mt_ca2: 0; ?></textarea>
</div>

<div class="col-lg-2">
<div class="form-group">
<label>Remark</label>
<input type="text" name="mt_ca3[]"  class="form-control" value="<?php echo $student->mtscores? $student->mtscores->mt_ca3: 0; ?>" >
</div>
</div>                                           
</div>

【问题讨论】:

  • 可能主题没有作为表单中的参数传递
  • 从技术上讲,您正在执行插入操作,并且在您执行插入操作后尝试从数据库中取回数据时,您应该通过按日期创建的 distinct(subject) 排序来限制结果,限制为 1 . 这将返回具有最后插入值的唯一主题列表。更好地了解您如何存储数据?多个表中的关系?这将帮助您创建一个独特的列表。

标签: php mysql codeigniter


【解决方案1】:

在您的模型中使用此更新后的代码


 public function addrn($data3)
    { 
       $statusIns=$this->checkAlreadyExistOrNor();
       if($statusIns==0){
        $this->db->insert_batch('mtscores_rn', $data3);
       }else{
         $this->db->where($data3);
         $this->db->update('mtscores_rn', $data3);
       } 
      return $this->db->affected_rows(); 
    }

public function checkAlreadyExistOrNor($data3){
    $this->db->select(*);
    $this->db->where($data3);
    $result=$this->db->get();
    $listData=$result->result_array();
    if(!empty($listData)){
      return 1;
    }else{
     return 0;
   }

}

【讨论】:

    猜你喜欢
    • 2019-03-06
    • 2014-10-28
    • 2014-01-12
    • 2019-06-06
    • 2011-10-18
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    相关资源
    最近更新 更多