基本上,我有一个锚标记(update(,它可以获取表中请求的id,并加载更新视图,获取所有请求的详细信息
<a href="<?php echo base_url('dashboard/staff/request/update_request_view/'.$drafts['idx']);?>" class="btn waves-effect waves-light btn-info update-button <?php if($drafts['status']=='ONGOING'){echo 'disableClick';}?>"><i class="fa fa-eye"></i> Update</a>
然后在我的方法中收到
public function update_request_view($idx)
{
//some code here to load the view and get details
}
url随后变为http://localhost/dashboard/staff/request/update_request_view/48
现在,当我试图保存我使用另一种方法进行的更新时
public function update()
{
$idx = $this->uri->segment(5);
}
我的$idx
变量为空。当我使用$this->uri->segment(4)
时,我会得到update_request_view。
我不想使用隐藏字段,因为这会导致很多安全问题,而且当我能够解决这个问题时,我会加密id。为什么我的$this->uri->segment(5)
是空的,我如何获得它?
如果我理解正确的话,很可能是因为update
函数是一个独立于http://localhost/dashboard/staff/request/update_request_view/48
的页面。因此CI看不到任何以前的url变量。您可以提交到update/{$id}
(操作url(,也可以使用隐藏字段;它的安全性不亚于在url中使用id,因为通过更改表单操作可以很容易地操作id。
也就是说,如果你真的关心安全性,你应该使用某种ACL来限制特定用户对给定记录的访问。