如何在CodeIgniter中将数据传递到模态框(Modal)?
在CodeIgniter中将控制器数据传递到编辑模态框的解决方案
我来帮你搞定这个问题,核心就是把控制器拿到的数据传递到模态框里,这里有两种常用的方法,你可以根据自己的场景来选:
方法一:AJAX异步加载数据(推荐,适合列表页批量编辑场景)
这种方法适合页面上有多个编辑按钮,点击每个按钮弹出同一个模态框并填充对应数据的场景,步骤如下:
1. 修改控制器的edit方法,返回JSON数据
你的控制器现在只是创建了数据数组,但没有输出数据,我们需要把它改成返回JSON格式,这样前端AJAX能直接接收:
public function edit($id_ekspor){ $eks = $this->m_ekspor->GetDataEkspor("where id_ekspor = '$id_ekspor'"); $data = array( "id_ekspor" => $eks[0]['id_ekspor'], "e_berat" => $eks[0]['e_berat'], "e_nilai" => $eks[0]['e_nilai'], "tahun" => $eks[0]['tahun'], "id_industri" => $eks[0]['id_industri'], "nm_industri" => $eks[0]['nm_industri'] ); // 输出JSON格式的数据给前端 echo json_encode($data); }
2. 给列表页的编辑按钮添加标识
在你的数据列表页面,给每个编辑按钮加上data-id属性,用来存储当前条目的id_ekspor:
<button class="btn btn-edit" data-id="<?php echo $item['id_ekspor']; ?>">编辑</button>
3. 添加JavaScript代码,实现点击填充模态框
引入jQuery后,添加以下代码监听按钮点击事件,通过AJAX获取数据并填充到模态框:
$(document).ready(function(){ $('.btn-edit').click(function(){ var eksporId = $(this).data('id'); // 发送AJAX请求到控制器的edit方法 $.ajax({ url: '<?php echo base_url('master_ekspor/edit/'); ?>' + eksporId, type: 'GET', dataType: 'json', success: function(response){ // 把返回的数据填充到模态框的对应字段 $('#id_ekspor').val(response.id_ekspor); $('#nm_industri').val(response.nm_industri); $('#e_berat').val(response.e_berat); $('#e_nilai').val(response.e_nilai); $('#tahun').val(response.tahun); $('#id_industri').val(response.id_industri); // 打开模态框 $('#con-close-modal').modal('show'); }, error: function(){ alert('获取编辑数据失败,请稍后重试'); } }); }); });
方法二:服务器端直接渲染数据(适合单独编辑页面)
如果你的模态框是在单独的编辑页面里,不需要批量操作,可以直接把数据传递到视图:
1. 修改控制器,传递数据到视图
在控制器的edit方法末尾,添加加载视图的代码,把$data数组传递过去:
public function edit($id_ekspor){ $eks = $this->m_ekspor->GetDataEkspor("where id_ekspor = '$id_ekspor'"); $data = array( "id_ekspor" => $eks[0]['id_ekspor'], "e_berat" => $eks[0]['e_berat'], "e_nilai" => $eks[0]['e_nilai'], "tahun" => $eks[0]['tahun'], "id_industri" => $eks[0]['id_industri'], "nm_industri" => $eks[0]['nm_industri'] ); // 加载包含模态框的视图,$data里的键会自动变成视图中的变量 $this->load->view('你的视图文件名', $data); }
这样你的模态框里的<?php echo $id_ekspor; ?>等变量就能正常获取到数据了。
重要提醒:防止SQL注入
你现在的SQL条件是直接拼接字符串的,存在SQL注入风险,建议修改模型的GetDataEkspor方法,使用CodeIgniter的参数绑定功能:
比如把模型方法改成:
public function GetDataEkspor($id_ekspor){ // 使用get_where方法自动处理参数绑定,避免注入风险 return $this->db->get_where('ekspor', array('id_ekspor' => $id_ekspor))->result_array(); }
然后控制器里调用的时候改成:
$eks = $this->m_ekspor->GetDataEkspor($id_ekspor);
内容的提问来源于stack exchange,提问作者irufano
相关产品推荐
相关产品推荐

