php - 如何将多个复选框值从视图传递到控制器(使用代码点火器框架)
问题描述
我尝试使用网站提供的教程学习 CodeIgniter 框架,我对 php 非常陌生,我可能会问一个愚蠢的问题。我试图将复选框状态值从视图传递到控制器(获取复选框的状态是否已选中),它显示在错误消息之后。
遇到 PHP 错误
严重性:警告
消息:为 foreach() 提供的参数无效
文件名:控制器/Todos.php
行号:29
当我在控制器中跟踪时,这是由于 foreach 循环初始化。然后我回应
echo $completed_todos;
echo $completed_todos[0];
echo $completed_todos[1]; — No value;
我认为,它不会将所有复选框值传递给控制器。
在视图中我使用了以下代码:(index.php)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple CodeIgniter App - Todos</title>
<link rel="stylesheet"
href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<?php echo form_open('todos/update_completed'); ?>
<h1>Todos</h1>
<div class="list-group">
<?php foreach ($todos as $todo) { ?>
<div class="list-group-item clearfix">
<?php
echo form_checkbox('completed', $todo->id, $todo->completed);
?>
<?php echo $todo->task; ?>
</div>
在控制器中我使用了下面的代码
Todos 控制器代码
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Todos extends CI_Controller {
public function __construct() {
parent::__construct();
// Load the todo model to make it available
// to *all* of the controller's actions
$this->load->model('Todo_model');
$this->load->helper('form');
}
public function update_completed() {
$completed_todos = $this->input->post('completed');
echo $completed_todos;
foreach ($completed_todos as $todo_id) {
echo 'The todo with id = ' . $todo_id
. ' is marked as completed.<br>';
}
}
解决方案
在这里,您想获取多个复选框的值,因此您需要放入一个数组。但是您已经尝试过简单的字符串并在 foreach 循环中使用它,这就是它给出错误的原因。
请检查以下代码。
index.php(查看文件)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple CodeIgniter App - Todos</title>
<link rel="stylesheet"
href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Todos</h1>
<?php echo form_open('todos/update_completed'); ?>
<div class="list-group">
<?php foreach ($todos as $todo) { ?>
<div class="list-group-item clearfix">
<?php echo form_checkbox('completed[]', $todo->id, $todo->completed); ?>
<?php echo $todo->task; ?>
</div>
<?php } ?>
</div>
<button type="submit">Submit</button>
<?php echo form_close();
</div>
</body>
</html>
Todos(控制器文件)
public function update_completed() {
$completed_todos = $this->input->post('completed');
// No need to echo $completed_todos. If you want then please do below line.
// var_dump($completed_todos);
foreach ($completed_todos as $todo_id) {
echo 'The todo with id = ' . $todo_id. ' is marked as completed.<br>';
}
}
推荐阅读
- python - django - 如何重用现有表中的字段进行 django 用户身份验证
- javascript - 模块解析失败意外令牌webpack反应nextjs
- php - 调用未定义函数 Intervention\Image\Gd\imagecreatefromjpeg()
- powerbi - Power BI - 根据切片器选择显示前 n 个月
- reactjs - 直接从语言环境/语言 react-i18next 加载翻译有什么区别?
- python - 如何使用 %d 自动读取多个变量
- ios - iOS 应用程序通常需要多长时间才能从后台状态暂停?
- typescript - Github Action- 拉取请求中的一些 EsLint 错误不会显示 Annonations
- java - 使用 Stream 遍历路径时实现自定义逻辑
- docker-compose - BitBucket Pipelines 中的 Docker Compose