如何在 Codeigniter 中将值从视图传递到模型

Posted

技术标签:

【中文标题】如何在 Codeigniter 中将值从视图传递到模型【英文标题】:How to pass a value from view to model in Code Igniter 【发布时间】:2014-02-17 00:03:43 【问题描述】:

我想编辑卡在这里的检索用户是我的代码

我在模型中有一个函数可以选择所有用户

public function retrieve() 
    $this->db->select('*');
    $query = $this->db->get('UserDetails');     
    return $query->result();

在控制器中将查询到的数据传递给视图

public function edit_user() 
    $data['query']=$this->user_model->retrieve();
    $this->layout->view('creation/update_user',$data);

这样

<?php foreach($query as $row): ?>
<a href="edit_user"><?php echo $row->username;?></a>
<?php echo $row->firstname;?></a>
<?php endforeach;?>

我希望当一个人点击用户名时,他应该能够编辑用户。 如何获取将传递给

的单击用户名的值
 $username 

在模型中(我知道 CI 是 MVC,如何传递给控制器​​然后传递给模型)

public function select_user_details() 
    $this->db->select('*');
    $this->db->where('username' $username);
    $query=$this->db->get('users');
    return $query->result();

在用于编辑用户的控制器中

public function edit_user() 
    $data['query']=$this->user_model->select_user_details();
    $this->layout->view('creation/update_user',$data);

在显示中

<? foreach($query as $row)
<input type="text" name="uname"  value="<?php echo $row->username; ?>"/>
<input type="text" name="name"  value="<?php echo $row->names; ?>"/>
<?php endforeach; ?>

【问题讨论】:

【参考方案1】:

您可以向编辑用户方法添加一个参数,并在您的控制器中进行重定向。因此,如果没有指定 id,您将获得所有用户的列表,但如果有 id,您将运行一个新的模型函数(使用 WHERE user_id = $id 而不是 $username 进行查询)并加载另一个视图。像这样的:

public function edit_user($id = false) 
    if ( !$id ) 
        $data['query']=$this->user_model->retrieve();
        $this->layout->view('creation/update_user',$data);
    
    else 
        $data['query']=$this->user_model->retrieve_one_user($id); // new model method for a single user
        $this->layout->view('creation/edit_user',$data);        // new view 
    

在您看来,您需要将您的用户名链接转到 .../edit_user/USER_ID_HERE。

您还可以为此使用不同的控制器方法:例如 list_users()edit_user($id)。此外,您可以在单个视图中执行此操作。这完全取决于您,什么最适合您的应用程序。有数百万种方法可以做到这一点。


要以最少的更改来做到这一点,只需在 select_user_details 方法(以及控制器中的 edit_user 方法)中添加一个参数:

public function select_user_details($username) 
...
public function edit_user($username) 
...

但同样,请确保用户列表中的链接转到 .../select_user_details/my_username_here。像这样:

<a href="edit_user/<?php echo $row->username;?>"><?php echo $row->username;?></a>

【讨论】:

好吧,我按照你的建议做了,但是在编辑选项上,它列出了 db '$data['query']=$this-&gt;user_model-&gt;retrieve_one_user($username);' 中的所有用户我应该如何修改 'retrieve_one_user($username)' 的样子?这就是我所拥有的public function retrieve_one_user($staff_id) $this-&gt;db-&gt;select('*'); $query=$this-&gt;db-&gt;get('users'); return $query-&gt;result(); 似乎你只需要在那里放一个 WHERE 子句就可以了。像$this-&gt;db-&gt;where('staff_id', $staff_id); 这样的东西,而不是return $query-&gt;result(); 你可以有return $query-&gt;row(); 实际上,这是从$this-&gt;db-&gt;where('staff_id', $staff_id); 开始的问题,我收到语法错误syntax error, unexpected '$staff_id' 这应该不是问题 - 你能在此之前 var_dump $staff_id 吗? 感谢在我的代码中我把这个语句弄乱了$this-&gt;db-&gt;where('staff_id', $staff_id)我忘记了$staff_id之前的逗号【参考方案2】:

在视图中-

  <?php foreach($query as $row): ?>
    <a href="<?php echo base_url()?>controllerName/edit_user/<?php echo $row->username;?>"><?php echo $row->username;?></a>
    <?php echo $row->firstname;?></a>
    <?php endforeach;?>>

在控制器中 -

    function edit_user($userName)
    
     $data['query']=$this->user_model->retrieve($userName);
     $this->layout->view('creation/update_user',$data);
    

在模型中 -

public function retrieve($userName) 
    $this->db->select('*');
    $query = $this->db->get('UserDetails');     
    return $query->result();

【讨论】:

以上是关于如何在 Codeigniter 中将值从视图传递到模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将值从自定义单元格设置/传递到视图控制器

如何在MVC C#中将文本框和下拉值从视图传递到控制器

将按钮值从视图传递给控制器​​(codeigniter)

如何在iphone中将值从一个标签栏传递到另一个标签栏

在 Asp.net MVC 中将值从视图传递到控制器

将变量从视图传递到视图 codeigniter