PHP CI 框架获取同名数组 input 表单值的方法
当开发需要动态添加或删除列表项(如商品、书籍)时,HTML 表单中常会出现多个同名的 input 元素。本文总结如何在 PHP CodeIgniter 框架中安全、准确地获取这类数组形式的表单数据,并附带前端的取值方案。
前端页面设置
为了实现数据的批量提交,前台页面的表单中必须将多个 input 元素的 name 属性设置为数组格式。例如向书架中添加书本,可以动态增加或删减输入框:
<form action="process.php" method="post">
<!-- 注意 name 属性为 books[] -->
<input type="text" name="books[]" />
<input type="text" name="books[]" />
<input type="text" name="books[]" />
<input type="submit" value="保存" />
</form>
此时,每个具有相同 books[] 名称的输入框都会被视为一个数组元素。浏览器在向服务器提交时,会自动将这些值组合成一个名为 books 的数组。
PHP CI 框架获取方法
在 CodeIgniter (CI) 框架中,推荐使用内置的安全输入库来获取这些数据。直接使用全局变量不仅不安全,而且框架封装了过滤和清理逻辑。
第1步:控制器中接收数组数据
- 目的: 获取前端 POST 过来的所有书名列表。
- 操作: 在对应的 Controller 方法中使用
$this->input->post()。
// 获取名为 'books' 的所有输入值,返回值为数组
$books = $this->input->post('books');
// 此时 $books 是一个标准的 PHP 数组:
// ['书A', '书B', '书C']
关键说明:
- 参数只需写
'books',不需要加[]。因为 HTML 中的books[]告诉服务端这是一个数组,而 CI 的 post 方法会根据键名自动解析。 - 如果不确定是否有数据,建议配合
isset或使用 CI 的get_post()方法进行非空判断,避免 undefined index 错误。
第2步:数据处理与遍历
拿到数组后,可以根据业务需求进行遍历插入数据库或其他操作:
if (!empty($books)) {
foreach ($books as $book) {
// 对每个 $book 进行处理,例如入库
// echo "添加书籍: " . htmlspecialchars($book);
}
}
JavaScript 前端取值参考
如果在未提交的情况下,需要通过 JavaScript 在前端获取这些同名输入框的值(例如用于实时校验或动态展示),可以使用 getElementsByName:
var els = document.getElementsByName("books");
for (var i = 0; i < els.length; i++) {
alert(els[i].value);
}
此方法能返回一个类数组对象,允许你遍历并读取每一个 input 的当前值。
注意事项
- 安全性: 永远不要直接使用
$_POST['books'],尤其是在开放环境中。始终通过$this->input->post()处理,以便启用 XSS 过滤。 - 动态性: 如果使用 AJAX 或 JS 动态增减 input,确保新增的元素也具有相同的
name="books[]"结构,否则后端只能收到已存在的那几个值。
以上就是 PHP CI 框架获取多个同名 input 元素值的详细内容,更多关于 PHP CI 表单处理的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









