
本文详解 codeigniter 3 编辑表单中数据无法回显的常见原因及解决方案,重点纠正视图层对数组/对象索引的误用,并提供安全、规范的值绑定写法。
本文详解 codeigniter 3 编辑表单中数据无法回显的常见原因及解决方案,重点纠正视图层对数组/对象索引的误用,并提供安全、规范的值绑定写法。
在 CodeIgniter 3 开发中,编辑(Update)表单常需将数据库查询出的记录预填充至 <input> 字段。但若出现“输入框为空”,多数情况并非数据库未查到数据,而是控制器传参方式与视图取值逻辑不匹配。
回顾你的代码问题:
- 控制器中:
$data = $res->stations;→ 此时$data是一个索引数组(如Array[0] => stdClass Object...),而非关联数组; - 视图中却写作:
<?php echo $data[stations]->book_name;?>→ 这里存在两个严重错误:-
stations未加引号,PHP 将其视为常量(未定义则报Notice,并转为字符串'stations',但$data['stations']实际不存在); - 实际数据位于
$data[0],而非$data['stations']。
-
✅ 正确做法分两步:
1. 控制器:统一包装数据为关联键名(推荐且健壮)
// ✅ 推荐:将查询结果明确赋给一个语义化键名(如 'record')
$data['record'] = $res->stations[0] ?? null; // 取首条记录,防空数组
$this->load->view('edit-book', $data);
2. 视图:安全取值 + 防错输出
<input type="text" name="book_name" class="form-control" value="<?php echo isset($record) ? htmlspecialchars($record->book_name, ENT_QUOTES, 'UTF-8') : ''; ?>" id="exampleInputName1" placeholder="请输入书名">
? 关键说明:
- 使用
htmlspecialchars()防止 XSS 攻击,尤其当数据含特殊字符(如, <code>")时; -
?? null和isset()避免未定义变量警告; - 若
$res->stations确保只有一条记录,也可直接用$data['record'] = $res->stations[0];; -
切勿省略引号写
$data[stations]—— 这是 PHP 语法陷阱,应始终写作$data['stations'](若真用该键名)或$data[0](当前场景)。
? 扩展建议:
对于更复杂的表单(如多字段、下拉联动),可封装为辅助函数或使用 CI 的 form_input() 等表单辅助函数,进一步提升安全性与可维护性。
总结:数据绑定失败,根源常在「控制器传参结构」与「视图取值路径」不一致。坚持「控制器明确定义键名 + 视图严格按键名取值 + 全链路防错处理」,即可彻底规避此类问题。











