如何在CodeIgniter中将edit方法的$id传递至edit_validate方法?
解决CodeIgniter通讯录编辑时ID传递与数据库未更新问题
先梳理下你代码里的核心问题,再给出针对性的修复步骤:
1. 先确认ID参数的传递链路是否完整
你调用$this->edit_validate($myid)时,首先要确保$myid已经正确从edit方法的参数中获取到。比如你的edit方法应该是这样的:
public function edit($id) { $myid = $id; // 把URL传来的ID赋值给$myid $this->load->model("Phonebook"); if ($this->input->server('REQUEST_METHOD') === 'POST') { $this->edit_validate($myid); } else { // GET请求时加载编辑页面,回显原有数据 $data['contact'] = $this->Phonebook->get_contact($myid); $this->load->view('edit_contact', $data); } }
如果$myid没有正确赋值,传递给验证方法的就是空值,自然找不到要更新的数据库记录。
2. 验证方法必须正确接收ID并执行更新
你的edit_validate方法需要明确接收ID参数,并且在验证通过后,带着ID调用模型的更新方法:
public function edit_validate($id) { // 设置表单验证规则(根据你的字段调整) $this->form_validation->set_rules('name', '姓名', 'required'); $this->form_validation->set_rules('phone', '手机号', 'required|numeric'); if ($this->form_validation->run() === FALSE) { // 验证失败,返回编辑页面并回显数据 $data['contact'] = $this->Phonebook->get_contact($id); $this->load->view('edit_contact', $data); } else { // 验证通过,组装更新数据 $update_data = [ 'name' => $this->input->post('name'), 'phone' => $this->input->post('phone'), // 其他需要更新的字段 ]; // 调用模型更新方法,必须传入ID作为更新条件 $this->Phonebook->update_contact($id, $update_data); // 重定向到列表页,避免表单重复提交 redirect('phonebook/list'); } }
3. 确保模型的更新方法逻辑正确
检查你的Phonebook模型中update_contact方法是否正确用ID作为更新条件:
public function update_contact($id, $data) { // 指定更新的记录ID $this->db->where('id', $id); // 执行更新操作 return $this->db->update('contacts', $data); }
4. 表单层面的细节检查
编辑页面的表单要确保action带上ID,同时可以加隐藏字段备份ID(可选):
<form method="post" action="<?php echo site_url('phonebook/edit/'.$contact['id']); ?>"> <!-- 可选:隐藏字段存储ID,防止URL参数丢失时备用 --> <input type="hidden" name="contact_id" value="<?php echo $contact['id']; ?>"> <div> <label>姓名:</label> <input type="text" name="name" value="<?php echo $contact['name']; ?>"> </div> <div> <label>手机号:</label> <input type="text" name="phone" value="<?php echo $contact['phone']; ?>"> </div> <button type="submit">保存修改</button> </form>
最后排查数据库未更新的额外可能
- 用
var_dump($this->db->affected_rows())在模型更新方法后输出,确认是否有行被修改 - 检查
$update_data中的键名是否和数据库表的字段名完全一致 - 确认ID对应的记录确实存在于数据库中
内容的提问来源于stack exchange,提问作者Gad Ashell
相关产品推荐
相关产品推荐

