数据库更新功能失效求助:附PHP控制器、Model及AJAX代码
问题分析与代码修正
你的代码存在几个关键问题导致更新功能失效,以下是具体问题和修正方案:
1. 控制器(Main)的错误
- 参数传递顺序错误:调用
update_sample模型方法时,$data变量还未定义,且没有把表单提交的$id3和$sample3传递给模型 - 未处理数据库执行结果:直接返回成功状态,没有判断更新是否真的成功
修正后的控制器代码:
public function update_sample(){ $id3 = sanitize($this->input->post('id3')); $sample3 = sanitize($this->input->post('sample3')); if($this->session->userdata('position_id') != ""){ // 组装模型需要的参数:样本值和ID,顺序对应SQL占位符 $update_params = array($sample3, $id3); // 执行更新并获取结果 $update_result = $this->model->update_sample($update_params); // 根据执行结果返回对应状态 $data = $update_result ? array("success" => 1, "message" => 'Note: You have successfully updated') : array("success" => 0, "message" => 'Update failed, please try again'); }else{ $this->logout(); $data = array("success" => 0, "message" => 'Session expired, please login again'); } generate_json($data); }
2. 模型(Model)的错误
- SQL参数不完整:UPDATE语句有两个占位符(
sample=?和id=?),但$data数组只传入了一个值,导致SQL执行时参数缺失
修正后的模型代码:
public function update_sample($params){ $sql = "UPDATE test SET sample=? WHERE id=? AND enabled=1"; // $params是包含样本值和ID的数组,顺序与SQL占位符对应 return $this->db->query($sql, $params); } // 可选:用CodeIgniter的Active Record写法,更易读且安全 // public function update_sample($sample_value, $id){ // $this->db->set('sample', $sample_value); // $this->db->where('id', $id); // $this->db->where('enabled', 1); // return $this->db->update('test'); // }
3. JavaScript的缺失
- 当前JS仅实现了点击按钮获取详情并弹出模态框的功能,没有处理模态框中提交更新的逻辑,导致更新请求从未发送到服务器
补充并修正后的JS代码:
// 点击更新按钮获取详情并填充模态框 $("#table-grid").delegate(".btnUpdate", "click", function(){ var id = $(this).data('value'); $.ajax({ type: 'post', url: base_url+'Main/view_details', data: {'id3': id}, dataType: 'json', success: function(data){ var res1 = data.result1; if(data.success == 1){ var sampleInput = document.getElementById("sample3"); sampleInput.value = res1[0].samples; sampleInput.dataset.id = id; // 把ID存储到输入框的data属性中,方便提交时获取 $('#update').modal(); } }, error: function(){ alert('Failed to load details'); } }); }); // 模态框提交按钮的点击事件(假设按钮ID为submitUpdate) $("#submitUpdate").click(function(){ var id = document.getElementById("sample3").dataset.id; var sampleValue = $("#sample3").val(); $.ajax({ type: 'post', url: base_url+'Main/update_sample', data: {'id3': id, 'sample3': sampleValue}, dataType: 'json', success: function(data){ if(data.success == 1){ alert(data.message); $('#update').modal('hide'); // 可选:刷新表格数据,展示最新内容 $("#table-grid").load(base_url+'Main/load_table_content'); }else{ alert(data.message); } }, error: function(){ alert('Update request failed'); } }); });
内容的提问来源于stack exchange,提问作者RutthhhBernabe
相关产品推荐
相关产品推荐

