You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:52:15