如何使用MVC结构在Codeigniter中查看更新?

时间:2018-11-27 01:53:32

标签: codeigniter codeigniter-3

我是Codeigniter的新手,但不是MVC框架的人。我看到一个显示申请人列表的视图。我想更新申请人。当我单击“申请人”行上的“更新”按钮时,或仅单击状态(使用标签)。

目标是仅更新申请人状态(未设置,通过,失败等)。如果无法理解我给出的代码,则可以使用新的代码和功能。

**** model ****“型号名称= activefile.php”

function updateApplicant($id, $fname, $mname, $lname, $gender, $bday, $num, $addr, $school, $crs, $srcstrat, $psdate, $psstatus, $date) {

    //  $datetime->format('Y-m-d H:i:s');
    $data = array(
        'fname' => $fname,
        'mname' => $mname,
        'lname' => $lname,
        'gender' => $gender,
        'birthday' => $bday,
        'contactno' => $num,
        'address' => $addr,
        'institution' => $school,
        'course' => $crs,
        'src_strat' => $srcstrat,
        'exam_date' => $date,
        'ps_date' => $psdate,
        'ps_status' => $psstatus,
    );

    $this->hrrecdb->select('*', 'activefile');
    $this->hrrecdb->where('active_file_id', $id);
    $this->hrrecdb->update('active_file ', $data);

}

**** controller ****““控制器名称= hrrecruitment.php”

public function updateApplicant($id) {

    $fname = $this->input->post('fn');
    $mname = $this->input->post('mn');
    $lname = $this->input->post('ln');
    $gender = $this->input->post('gender');
    $bday = $this->input->post('bday');
    $num = $this->input->post('num');
    $addr = $this->input->post('addr');
    $school = $this->input->post('school');
    $crs = $this->input->post('crs');


    if ($this->input->post('srcstrat') == 'emprefopt') {
        if ($this->input->post('empref_autocomplete_label') && $this->input->post('empref')) {
            $srcstrat = 'empref_' . $this->input->post('empref');
        } else {
            $srcstrat = 'empref_' . $this->input->post('emprefhid');
        }
    } else if ($this->input->post('srcstrat') == 'others') {
        $srcstrat = 'others_' . $this->input->post('others');
    } else {
        $srcstrat = $this->input->post('srcstrat');
    }

    $psdate = $this->input->post('psdatehid');
    $psstatus = $this->input->post('psstatus');

    if ($psstatus != 'Not Set' && $psdate == '0000-00-00') {
        $psdate = date('Y-m-d');
    }
    $date = $this->input->post('exam');

    if ($date != '0000-00-00' && $date) {
        $this->add_recruitment($id, $date);
    }

    if ($this->input->post('pscheck') == 'changed') {
        $this->Activefile->updateHistory($id, $this->user->get_fullName());
    }
    $this->Activefile->updateApplicant($id, $fname, $mname, $lname, $gender, $bday, $num, $addr, $school, $crs, $srcstrat, $psdate, $psstatus, $date);

    redirect(base_url() . 'hrrecruitment/applicants/all');
    $this->edit_info($id);
}

1 个答案:

答案 0 :(得分:0)

不清楚您要问什么问题。但是我确实看到该模型在这三行中都有轻微缺陷

$this->hrrecdb->select('*', 'activefile');
$this->hrrecdb->where('active_file_id', $id);
$this->hrrecdb->update('active_file ', $data);

第一行对于您正在执行的操作并不重要。调用select是为了……选择数据。删除此行。

第二行和第三行可以一次调用

$this->hrrecdb->update('active_file ', $data, array('active_file_id' => $id));

函数update接受第三个参数-WHERE子句。因此,结实的array('active_file_id' => $id)在说与$this->hrrecdb->where('active_file_id', $id);相同的内容,打字少是好的,是吗?

最后,控制器有一个明显的问题。

redirect(base_url() . 'hrrecruitment/applicants/all');
$this->edit_info($id);

由于函数redirect不返回,因此永远不会调用最后一行。相反,它将浏览器发送到新页面,脚本执行结束。不清楚您要通过调用$this->edit_info($id)来完成什么,但是它永远不会运行。

提示1:函数base_url()可以接受URI段。因此,像这样使用它。

base_url('hrrecruitment/applicants/all')

提示2:redirect()函数将为您找出base_url,因此您真正需要的就是

redirect('hrrecruitment/applicants/all');

提示3:当您发现自己一次又一次地编写完全相同的调用时,然后捕获返回值并使用它。例如:

$srcstrat = $this->input->post('srcstrat');
if($srcstrat == 'emprefopt')
{
    if($this->input->post('empref_autocomplete_label') && $this->input->post('empref'))
    {
        $srcstrat = 'empref_'.$this->input->post('empref');
    }
    else
    {
        $srcstrat = 'empref_'.$this->input->post('emprefhid');
    }
}
elseif($srcstrat == 'others')
{
    $srcstrat = 'others_'.$this->input->post('others');
}