Php 如何将输入值从视图传递到控制器和模型以正确获取数据?共点火器
我试图获取与输入隐藏值具有相同id的数据 我无法获取数据的id或输入隐藏值 首先,这是我所做的,使事情更清楚,我调试的东西,我做了一个硬编码的形式和一个按钮,把我带到页面 在视图中-groups/index.phpPhp 如何将输入值从视图传递到控制器和模型以正确获取数据?共点火器,php,ajax,codeigniter,codeigniter-3,Php,Ajax,Codeigniter,Codeigniter 3,我试图获取与输入隐藏值具有相同id的数据 我无法获取数据的id或输入隐藏值 首先,这是我所做的,使事情更清楚,我调试的东西,我做了一个硬编码的形式和一个按钮,把我带到页面 在视图中-groups/index.php public function index(){ $this->load->view('templates/header'); $this->load->view('teachers/posts/index'); $this->l
public function index(){
$this->load->view('templates/header');
$this->load->view('teachers/posts/index');
$this->load->view('templates/footer');
}
正如你所看到的,我制作了posts/index/1
,这是一个硬编码的值,但我以后可以很容易地更改它,这不是我的问题
于是我拿了那一页。现在,我可以浏览/posts/index/1
并查看我的页面
在我的页面posts/index.php中,我有一个数据,它是通过Ajax获取的
所以我已经在posts/showPosts
最后,根据提交的数据ID,使用模型确定是否获取了正确的ID
问题是$id为null,我一开始就没有线索,因为我在视图页面上声明了一个隐藏的输入值
我将试着比你之前的问题更好地理解这个问题(现在可以安全地删除,因为这是对你问题的更好描述) 在
groups/index.php
视图中,您希望允许用户导航到posts/index
页面,并将整数作为单个参数传递(由您硬编码,而不是由用户输入)——我将其称为$txtGroup
,以了解上下文。因为您没有执行插入
|更新
|删除
操作,所以更好的做法是将数据作为$\u GET
发送,而不是$\u POST
。因为Codeigniter允许将$\u GET
参数作为url的斜杠分隔扩展传递,所以设置
没有任何好处
使用首选类将新超链接样式设置为按钮
<a href="<?php echo base_url("posts/index/{$integer}"); ?>">Link to <?php echo $integer; ?></a>
如果您对将
$txtGroup
传递到视图不感兴趣,那么将值从groups/index.php
传递到posts/index
的唯一其他原因是修改查询,然后将动态数据传递到teachers/posts/index
视图(加载视图时需要提供)
在模型中,使用传递的参数
public function showPosts($groupId) {
return $this->db->get_where('questions', ['group_id' => $groupId])->result_array();
}
这样,您就不需要使用ajax调用(看起来您无论如何都是在视图中无条件触发的)。现在,Codeigniter将发挥其神奇的作用,将$data
传输到您的视图中,从而您可以访问多维结果集$posts
(该变量由您分配给它的第一级键命名)。使用foreach()
循环迭代结果行并生成html内容——所有这些都使用服务器端语言
<?php foreach ($posts as $index => $post) { ?>
<div class="card">
// ... the rest of your content ...
<?php } ?>
// ... 其余的内容。。。
使用上述循环设计新的动态内容时:
- 使用
作为计数器,这样就不必手动递增$index
- 不允许
插入
|
更新
|
删除
操作由
事件触发,这不是最佳做法。这些类型的操作只能由$\u GET
提交发起$\u POST
public function showPosts(){
// Show questions and answers
$id = $this->input->post('txtGroup');
$this->db->select('*');
$this->db->from('questions');
$this->db->where('group_id', $id);
$query = $this->db->get();
return $result = $query->result_array();
}
<a href="<?php echo base_url("posts/index/{$integer}"); ?>">Link to <?php echo $integer; ?></a>
public function index($txtGroup) {
$this->load->view('templates/header');
// if you want to pass the value to THIS
$this->load->view('teachers/posts/index', ['txtGroup' => $txtGroup]);
$this->load->view('templates/footer');
}
public function index($txtGroup) {
$data['posts'] = $this->post_model->showPosts($txtGroup);
$this->load->view('templates/header');
$this->load->view('teachers/posts/index', $data);
$this->load->view('templates/footer');
}
public function showPosts($groupId) {
return $this->db->get_where('questions', ['group_id' => $groupId])->result_array();
}
<?php foreach ($posts as $index => $post) { ?>
<div class="card">
// ... the rest of your content ...
<?php } ?>