Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将输入值从视图传递到控制器和模型以正确获取数据?共点火器_Php_Ajax_Codeigniter_Codeigniter 3 - Fatal编程技术网

Php 如何将输入值从视图传递到控制器和模型以正确获取数据?共点火器

Php 如何将输入值从视图传递到控制器和模型以正确获取数据?共点火器,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

我试图获取与输入隐藏值具有相同id的数据

我无法获取数据的id或输入隐藏值

首先,这是我所做的,使事情更清楚,我调试的东西,我做了一个硬编码的形式和一个按钮,把我带到页面

在视图中-groups/index.php

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
    提交发起

@Mana你走了吗?
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 } ?>