【问题标题】:URI segment lost in CodeigniterURI 段在 Codeigniter 中丢失
【发布时间】:2016-09-07 19:04:39
【问题描述】:

在我的 codeigniter 应用程序中,我有一个用户列表,管理员可以在其中更改用户的角色并更新用户信息。编辑用户时,url 为 user/edit_user/1002 并加载了 edit_user 视图。 1002是用户的userid。

当我提交表单并且 form_validation 失败时,我会重新加载视图,但问题是 URL 上带有用户 ID 的最后一段丢失了。因此表单中使用的 sql 查询失败。有没有办法可以重新加载带有错误的视图并将用户 ID 保留在 uri 段中?代码如下:

if ($this->form_validation->run() == FALSE) {

        $userid = $this->uri->segment(3);   
        $this->db->where('userid', $userid);
        $query = $this->db->get('user');
        $row1 = $query->row();      
        $data = (array)$row1;                                                   

        $sql = "SELECT userid, role_id FROM user_role WHERE userid = $userid ";// This sql fails
        $ro = $this->db->query($sql);

        $data['role_check'] = $ro->result(); 
        $this->load->view('edit_user',$data);   
}   

提前致谢。

在 view_user.php 中,

    <tr>
        <td><?php echo $loop->userid;?></td>
        <td><?php echo $loop->name;?></td>                      
        <td><a class="btn-small btn-info" href="<?php echo site_url(); ?>/user/edit_user/<?php echo $loop->userid;?>">Edit</td>

    </tr>

in 控制器用户,我已经使用了我最先发布的代码。

【问题讨论】:

  • 设置成SESSION VARIABLE,更新后销毁
  • 或者在更新操作url中再次传递相同的id user/edit_user/uri->segment(3);
  • validation 将是 false 两次,即首先加载页面,然后再次验证错误。所以,销毁 SESSION VARIABLE 是行不通的。 uri 段来自 view_user 页面,单击 EDIT 后,它转到 edit_user 页面。如果我把 uri->segment(3); ?> 在操作中,出现错误“消息:CI_URI 类的对象无法转换为字符串”。这个问题真的很烦人。
  • 你能发布你尝试过的完整代码吗
  • @jothi,更新了帖子

标签: php codeigniter


【解决方案1】:

在表单的操作中添加用户 ID。

类似这样的:

action="user/edit_user/<?php echo $this->uri->segment(3); ?>"

【讨论】:

  • 在表单操作中传递 id 会引发错误“消息:CI_URI 类的对象无法转换为字符串”。
【解决方案2】:

我自己解决了这个问题并分享它以防其他人遇到这个问题。通过 CI 文档,我发现如果该段不存在,该函数将返回 FALSE。我已经用它来涵盖更新可能面临的所有条件。代码如下:

  if($this->uri->segment(3))
        {   $userid = $this->uri->segment(3);   
            $this->session->set_userdata('update_user_id',$userid);
        }               
        else            
            $userid= $this->session->userdata('update_user_id');    

在重新验证表单的情况下,$this->uri->segment(3) 将返回 FALSE,否则条件将从会话中选择用户 ID,该用户 ID 在首次通过单击编辑链接填充表单时设置。

谢谢大家。

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 2012-06-07
    • 1970-01-01
    相关资源
    最近更新 更多