【问题标题】:How to pass a value from view to model in Code Igniter如何在 Codeigniter 中将值从视图传递到模型
【发布时间】: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; ?>

【问题讨论】:

    标签: php codeigniter


    【解决方案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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多