管理员可以在单击用户的用户名后显示用户配置文件

时间:2013-01-18 07:12:15

标签: php codeigniter

  

在我的管理员页面中,我有用户列表..我希望如果我点击用户名,它会将我重定向到其个人资料..   这是我的管理页面视图:

<table class="table table-striped table-bordered table-condensed">
<tr>
 <th>username</th>
 <th>firstname</th>
     <th>lastname</th>
 <th>email</th>
 <th>usertype</th>
 <th>Action</th>
</tr>
 <?php foreach ($info as $infos): ?>
<tr>
 <td>
  <?php 
   $user=$infos['username']; 
   print_r ($user);
   $this->session->set_userdata($user);
  ?>
  </td>
  <td><?php echo $infos['firstname']?></td>
  <td><?php echo $infos['lastname']?></td>
  <td><?php echo $infos['email']?></td>
 <td><a href="<?php echo base_url()?>users/showuser">Show</a> | <a href="<?php echo      base_url()?>users/deleteuser">Delete</a></td>
</tr>
<?php endforeach ?>
  

我的控制器的一部分是:

  public function showuser()
{
    $this->load->helper(array('form','url'));
    $this->load->library('form_validation');
    $this->check_isValidated();

    $data['info'] = $this->users_model->user_info();
    $this->load->view('users/showuser',$data);          
}
  

在我的模特中:

public function user_info()
{
    $this->load->database();
    $this->db->select('username,firstname,lastname,email');
    $user = $this->session->userdata('user');
    $this->db->where('username',$user);
    $query = $this->db->get('users');
    if($query->num_rows > 0)
    {
        $row = $query->row();
        $data = array(
            'firstname' =>$row->firstname,
            'lastname' =>$row->lastname,
            'username' =>$row->username,
            'email' =>$row->email,
        );
        return $data;
    }else{
        return false;
    }
  

我的问题是,当我点击某个用户时,它不会显示其相应的个人资料,而是会显示您数据库中列出的第一个用户的个人资料。
如何比较模型中的id

1 个答案:

答案 0 :(得分:1)

你真的需要花一些时间从你的代码的外观中阅读一些教程,因为如果你继续这样的话,你将会遇到很多问题。首先,您要按用户名而不是唯一ID加载用户,这意味着我猜测您的用户表甚至没有唯一ID,这反过来意味着它没有被编入索引,因此最终会遇到性能问题。

无论如何,除了这个问题。第一个问题是观点。您没有为您想要的用户传递任何参数,因此您每次只加载一个没有任何参数的函数。您的网址应如下所示,每次都可以传递正确的参数。

//Again, you really should have a userId that you are passing here.
<a href="<?php echo base_url()?>users/showuser/$infos['username']">Show</a>

然后在模型中你有两个问题,你将登录用户的用户名传递给数据库,这样你就不会得到别人的个人资料。见下文:

控制器:

//this sets the user to the parameter we added to the url above and passes it to the model function.
$data['info'] = $this->users_model->user_info($this->uri->segment(3));

型号:

public function user_info($user)
{
// you're now getting the user from the controller like you should be.
$this->load->database();
$this->db->select('username,firstname,lastname,email');
$this->db->where('username',$user);

我没有包含您的所有代码,只包括相关部分。请记住,这将解决您的直接问题,它没有解决您已完成的其他问题。没有安全检查意味着拥有该URL的任何人都可以看到其他人的个人资料,似乎没有ID等等。祝你好运,但是真的需要一些时间并尽可能多地阅读有关数据库结构和理解CI如何工作的内容。 / p>