如何在 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->user_model->retrieve_one_user($username);'
中的所有用户我应该如何修改 'retrieve_one_user($username)'
的样子?这就是我所拥有的public function retrieve_one_user($staff_id) $this->db->select('*'); $query=$this->db->get('users'); return $query->result();
似乎你只需要在那里放一个 WHERE 子句就可以了。像$this->db->where('staff_id', $staff_id);
这样的东西,而不是return $query->result();
你可以有return $query->row();
实际上,这是从$this->db->where('staff_id', $staff_id);
开始的问题,我收到语法错误syntax error, unexpected '$staff_id'
这应该不是问题 - 你能在此之前 var_dump $staff_id 吗?
感谢在我的代码中我把这个语句弄乱了$this->db->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 中将值从视图传递到模型的主要内容,如果未能解决你的问题,请参考以下文章