我是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);
}
答案 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');
}