2016-05-12 120 views
1

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

当我提交表单和form_validation失败时,我重新加载视图,但问题是网址上的最后一段,用户标识丢失。所以表单中使用的sql查询失败。有没有一种方法可以重新加载错误的视图,并保持uri段中的用户ID?以下是代码:

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> 

的在控制器的用户中,我使用我张贴第一代码。

+0

将其设置为SESSION VARIABLE,并在更新 – JYoThI

+0

后销毁它,或者在更新操作url中再次传递相同的ID too user/edit_user/<?php echo $ this-> uri-> segment(3); – JYoThI

+0

验证将被错误两次,即首先加载页面,然后再次验证错误。所以,销毁SESSION VARIABLE不起作用。 uri片段来自view_user页面,点击EDIT,进入edit_user页面。如果我把<?php echo $ this-> uri-> segment(3); ?>,那么会出现错误“消息:类CI_URI的对象无法转换为字符串”。这个问题变得非常刺激。 – John

回答

0

我已经解决了自己的问题,并在万一有人分享它在其他面临这个问题。通过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');  

在窗体的再验证的情况下,$这个 - > URI->段(3)将返回FALSE和其他条件将挑选从会话的用户ID,其被设置在表单首先通过点击编辑链接填充。

谢谢大家。

1

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

事情是这样的:

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

在窗体动作中传递id会抛出错误“消息:类CI_URI的对象无法转换为字符串”。 – John