CodeIgniter中如何在存入MySQL前检查表单输入值是否变更
解决CodeIgniter中用户名字段变更检测的问题
你的代码里有几个关键问题导致无法正常工作,我来帮你一步步修正:
1. 条件判断逻辑完全错误
你当前写的'first_name' != $first_name是把字符串'first_name'和变量$first_name做对比,这显然不是你要的逻辑——我们需要的是数据库里存储的用户原始名字和用户提交的新名字做比较。
首先得先从数据库拉取当前用户的原始first_name数据,比如:
// 假设$user_id是当前登录用户的ID,根据实际情况替换 $original_user = $this->db->get_where('users', ['id' => $user_id])->row(); $original_first_name = $original_user->first_name; // 获取用户表单提交的新名字 $new_first_name = $this->input->post('first_name');
2. 修正条件判断与日期赋值
接下来把判断逻辑改成对比原始值和新值,同时注意date()函数的调用不要加单引号(加单引号会让它变成字符串字面量,而不是执行函数生成日期):
$data = []; // 先初始化存储更新数据的数组 // 检查名字是否真的发生了变更 if ($original_first_name !== $new_first_name) { $data['first_name_edited'] = 1; $data['update_fname_date'] = date('Y-m-d'); // 这里直接调用函数,不要加单引号 } // 把其他需要更新的字段(比如姓氏、出生日期)加入$data $data['last_name'] = $this->input->post('last_name'); $data['birth_date'] = $this->input->post('birth_date'); // 最后执行数据库更新操作 $this->db->where('id', $user_id); $this->db->update('users', $data);
额外优化建议
- 用
!==严格比较(值和类型都一致),避免因为空值或类型转换导致的误判; - 如果担心用户输入的名字有空格、大小写差异,可以先做统一处理:
$original_first_name = trim(strtolower($original_user->first_name)); $new_first_name = trim(strtolower($this->input->post('first_name')));
- 确保CodeIgniter的输入类已经加载(默认自动加载,若没加载可以在模型/控制器里加
$this->load->library('input');)
这样就能准确检测到first_name是否被修改,并正确记录修改标记和日期了!
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

