CodeIgniter中使用href删除记录失效问题求助
问题排查与修复方案
嘿,这问题的核心原因一眼就能看出来,咱们一步步来解决:
1. 视图层的致命错误:嵌套PHP标签导致URL解析异常
你在视图的echo语句里错误嵌套了<?php ?>标签——PHP不会解析这种嵌套的标签,反而会把它当成普通字符串输出,最终导致URL里出现了编码后的%3C?php%20echo%20base_url();?%3E。
错误代码:
<?php echo "<td class='text-center'><div class='btn-group btn-group-xs'><a href='#' data-logid='" . $org->id . "' data-target='#editGroups' data-toggle='modal' title='Edit' class='open_modal btn btn-default'><i class='fas fa-edit'></i></a>"; echo "<a href='<?php echo base_url();?>/Organisation/delete_org?id=$org->id' class='btn btn-danger confirmation'><i class='fas fa-times'></i></a></div></td></tr>"; ?>
修正后的视图代码:
直接在当前PHP上下文里拼接base_url(),不需要再开启新的PHP标签:
<?php echo "<td class='text-center'><div class='btn-group btn-group-xs'> <a href='#' data-logid='" . $org->id . "' data-target='#editGroups' data-toggle='modal' title='Edit' class='open_modal btn btn-default'> <i class='fas fa-edit'></i> </a> <a href='" . base_url('Organisation/delete_org?id=' . $org->id) . "' class='btn btn-danger confirmation'> <i class='fas fa-times'></i> </a> </div></td></tr>"; ?>
或者用更简洁的双引号变量解析写法(注意用大括号包裹变量):
<?php $deleteUrl = base_url("Organisation/delete_org?id={$org->id}"); echo "<td class='text-center'><div class='btn-group btn-group-xs'> <a href='#' data-logid='{$org->id}' data-target='#editGroups' data-toggle='modal' title='Edit' class='open_modal btn btn-default'> <i class='fas fa-edit'></i> </a> <a href='{$deleteUrl}' class='btn btn-danger confirmation'> <i class='fas fa-times'></i> </a> </div></td></tr>"; ?>
2. 控制器层的小问题:未正确获取ID参数
你的delete_org函数里直接使用了未定义的$id变量,会导致PHP报错,必须先获取URL传递的ID:
修正后的控制器代码(GET参数方式):
function delete_org() { // 获取URL中的?id=3参数 $id = $this->input->get('id'); // 确保ID存在再执行删除 if (!empty($id)) { $this->Org_model->org_delete($id); } redirect('Organisation/organisation'); }
更推荐的RESTful风格写法(URL分段传递ID):
如果把链接改成base_url("Organisation/delete_org/{$org->id}"),同时在routes.php添加路由规则:$route['Organisation/delete_org/(:num)'] = 'Organisation/delete_org/$1';,控制器可以写成:
function delete_org($id) { $this->Org_model->org_delete($id); redirect('Organisation/organisation'); }
这种方式更规范,也避免了GET参数的潜在问题。
3. 模型层代码没问题(可选优化)
你的模型代码逻辑是对的,可选添加返回值以便控制器判断删除是否成功:
function org_delete($id) { $this->db->where('id', $id); return $this->db->delete('organisation'); // 返回删除是否成功的布尔值 }
总结
先修复视图里的链接写法(去掉嵌套的PHP标签),再确保控制器正确获取ID参数,这样点击删除按钮后就能正常跳转到正确的URL,执行删除操作了。
内容的提问来源于stack exchange,提问作者suresh
相关产品推荐
相关产品推荐

