CodeIgniter中URL显示%201异常 如何输出指定ID对应数据行
CodeIgniter CRUD功能开发问题修复方案
问题1:编辑链接URL末尾显示%201而非数字ID
问题原因
%20是URL中空格字符的编码结果,异常来自视图层链接拼接的书写错误:原代码中site_url()输出的控制器路径后,斜杠与ID输出标签之间多输入了一个空格,该空格被URL转义后就出现了%201的异常效果。
修复方案
修正视图层的链接拼接逻辑,删除多余空格,推荐直接把ID参数作为路径一部分传入site_url()函数,避免PHP标签外拼接引入多余字符,修复后的视图代码如下:
<td><a href="<?php echo site_url('CrudController/edit/'.$row->id); ?>">Edit</a> | Delete </td>
注意:
$row->id中对象操作符->两侧不要加多余空格,遵循PHP书写规范。
问题2:查询并输出指定ID的数据行
你当前的控制器edit方法未接收URL传递的ID参数,也没有实现数据查询逻辑,按以下逻辑修改即可:
- 为控制器方法添加路由参数,用于接收URL传入的ID值,增加合法性校验避免非法访问
- 加载对应数据表的操作模型,编写查询方法按ID匹配数据行
- 将查询结果传递到编辑视图供调用输出
控制器修改示例
public function edit($id = NULL) { // ID合法性校验 if ($id === NULL || !is_numeric($id)) { show_404(); } // 加载数据模型,模型名替换为你项目中实际的模型名称 $this->load->model('Crud_model'); // 调用模型方法查询指定ID的数据 $data['row'] = $this->Crud_model->get_record_by_id($id); // 校验查询结果,不存在对应数据则抛出404 if (empty($data['row'])) { show_404(); } // 传递数据到编辑视图 $this->load->view('crudEdit', $data); }
模型层查询方法示例(对应添加到Crud_model中)
public function get_record_by_id($id) { // 将your_table替换为你项目中实际的数据表名 return $this->db->where('id', $id)->get('your_table')->row(); }
修改完成后,在crudEdit视图文件中可以直接通过$row变量访问该ID对应的数据行,输出字段示例:echo $row->字段名;
内容的提问来源于stack exchange,提问作者javax
相关产品推荐
相关产品推荐

