CodeIgniter中按钮状态值传至文本框及用户状态更新问题
问题分析与修复方案
看起来你遇到了点击按钮后状态值无法传递到模态框输入框的问题,我帮你梳理下问题根源和具体的修复步骤:
核心问题排查
你的按钮同时绑定了两个独立的点击事件(.showmodal和.user_status),事件触发的时序问题会导致状态值赋值操作可能在模态框显示之前执行,或者被后续操作覆盖;另外还有几处细节错误需要修正。
1. 合并点击事件,解决时序冲突
把两个分开的点击事件合并成一个,确保在打开模态框的同时完成状态值和ID的赋值,避免时序问题:
<script> // 合并按钮的点击事件,同时处理ID、状态赋值和模态框显示 $('.showmodal.user_status').on('click', function(e){ e.preventDefault(); // 传递UserID $('#usertransferid').val($(this).data('id')); // 传递状态值 $('#user_status').val($(this).attr('ustatus')); // 显示模态框 $('#fundModal').modal('show'); }); // 模态框隐藏时清空输入框,注意修正元素ID $('#fundModal').on('hidden.bs.modal', function () { $('#usertransferid').val(''); $('#user_status').val(''); // 原来的代码写错了ID,这里改成正确的#user_status }); </script>
2. 修正模态框重置的元素ID错误
你原来的代码里写了$('#ustatus').val(''),但模态框中状态输入框的ID是user_status,这个笔误会导致下次打开模态框时状态值无法正确清空,上面的代码已经修复了这个问题。
3. (可选)规范自定义属性命名(HTML5标准)
HTML5推荐自定义属性使用data-*前缀,这样更符合标准规范,你可以修改按钮的属性:
<button data-id="<?php echo $rows->transID?>" data-ustatus="Active" class="showmodal fundTable btn btn-success btn-sm text-bold user_status"> <?php echo $rows->transID?> active </button>
对应的脚本中获取状态值的代码可以改成更简洁的:
$('#user_status').val($(this).data('ustatus'));
4. 修复Controller中的致命更新漏洞
你的user_status_changed方法里没有添加WHERE条件,执行时会更新users表中所有用户的状态,这是非常危险的!必须添加条件只更新指定ID的用户:
public function user_status_changed() { //获取提交的值 $id = $this->input->post('id'); $status = $this->input->post('status'); // 先校验ID是否有效 if(empty($id)){ $this->session->set_flashdata('msg',"Invalid User ID."); $this->session->set_flashdata('msg_class','alert-danger'); return redirect('welcome/users'); } $data = array('status' => $status ); // 添加WHERE条件,仅更新指定ID的用户(假设用户ID字段是transID,根据你的表结构调整) $this->db->where('transID', $id); $this->db->update('users', $data); //更新状态 //设置成功提示 $this->session->set_flashdata('msg',"User status has been changed successfully."); $this->session->set_flashdata('msg_class','alert-success'); return redirect('welcome/users'); }
5. 确保表单能正确提交ID参数
模态框中的UserID输入框缺少name属性,导致Controller无法通过$this->input->post('id')获取到值,需要添加:
<input type="text" id="usertransferid" name="id">
内容的提问来源于stack exchange,提问作者Dark
相关产品推荐
相关产品推荐

