如何使用 Codeigniter 从同一表单插入和更新数据
How To Insert and Update Data From Same Form using Codeigniter
任何人都可以帮助我编写控制器、模型和视图,从中会有一个采用隐藏 ID 的单一表单(视图),控制器检查来自视图的请求是否有 ID,并根据它会插入和更新相同。
基本上你只需要检查你的数据库中是否存在隐藏的id。如果不是,那么你 insert
,如果是,你 update
。一般来说,你是这样做的:
<?php
class some_controller extends CI_Controller {
/**
* Submits the form
*
* @return boolean
*/
public function submit_form() {
$id = $this->input->post('id');
$data = array(
'somedata' => $this->input->post('somedata'),
'someotherdata' => $this->input->post('someotherdata')
);
$this->load->model('some_model');
if (!is_null($id) && $this->some_model->id_exists($id)) {
return $this->db->update('sometable', array('id' => $id), $data);
} else {
// assumes sometable autoincrements id
// otherwise $data = array_merge(array('id' => $id), $data);
return $this->db->insert('sometable', $data);
}
}
}
class some_model extends CI_Model {
/**
* Checks if id exists in sometable
*
* @return boolean TRUE if item with $id exists in sometable
*/
public function id_exists($id) {
$this->db->where('id', $id);
return $this->db->count_all_results('sometable') > 0;
}
}
请注意:好的做法是将插入和更新(实际上是所有查询)移动到模型中。这只是一个例子。
任何人都可以帮助我编写控制器、模型和视图,从中会有一个采用隐藏 ID 的单一表单(视图),控制器检查来自视图的请求是否有 ID,并根据它会插入和更新相同。
基本上你只需要检查你的数据库中是否存在隐藏的id。如果不是,那么你 insert
,如果是,你 update
。一般来说,你是这样做的:
<?php
class some_controller extends CI_Controller {
/**
* Submits the form
*
* @return boolean
*/
public function submit_form() {
$id = $this->input->post('id');
$data = array(
'somedata' => $this->input->post('somedata'),
'someotherdata' => $this->input->post('someotherdata')
);
$this->load->model('some_model');
if (!is_null($id) && $this->some_model->id_exists($id)) {
return $this->db->update('sometable', array('id' => $id), $data);
} else {
// assumes sometable autoincrements id
// otherwise $data = array_merge(array('id' => $id), $data);
return $this->db->insert('sometable', $data);
}
}
}
class some_model extends CI_Model {
/**
* Checks if id exists in sometable
*
* @return boolean TRUE if item with $id exists in sometable
*/
public function id_exists($id) {
$this->db->where('id', $id);
return $this->db->count_all_results('sometable') > 0;
}
}
请注意:好的做法是将插入和更新(实际上是所有查询)移动到模型中。这只是一个例子。