如果用户名存在,CodeIgniter按用户名获取userinfo,如果没有得到userID

时间:2014-10-07 15:20:31

标签: php mysql codeigniter url

我想要创建的内容基本上与Facebook类似。如果用户发布了他/她的用户名,则链接将如下:www.mysite.com/user/{username},如果没有链接,则可以是:www.mysite.com/user/{userid}。使用下面的代码,我试图从数据库中检索所有字段的未定义索引。它仅适用于user_id,但不适用于用户名。任何帮助将不胜感激。

链接到个人资料(视图):

<a href="<?=base_url()?>user/<?=isset($event['username']) ? $event['username'] : $event['creatoruserid']?>">
    <img src="<?=base_url()?>public/images/uploads/profiles/<?=$event['profilepic']?>" class="event-profile-pic">
</a>

路由到个人资料:

$route['user/(:any)'] = "user/profile/$1";

用户控制方式:

<?php

class User Extends CI_Controller
{

    public function __construct()
    {

        parent::__construct();
        $this->load->model('event_model');
        $this->load->model('user_model');
    }

    public function profile($user_id)
    {
        // All the data we need in profile page

        $data['user'] = $this->user_model->getUserInfo($user_id);
        $data['events'] = $this->event_model->getEventsById($user_id);
        $data['total_events_created'] = $this->user_model->TotalEventsCreated($user_id);
        $data['total_comments'] = $this->user_model->TotalComments($user_id);
        $data['total_attending_events'] = $this->user_model->TotalAttendingEvents($user_id);

        $this->load->view('/app/header');
        $this->load->view('/app/profile', $data);
        $this->load->view('/app/footer');

    }
}

从数据库中检索userinfo的模型:

<?php

class User_model extends CI_Model
{

    public function getUserInfo($user_id)
    {

        $this->db->select('*')->from('users')->where(['user_id' => $user_id]);

        $query = $this->db->get();

        return $query->first_row('array');
    }
}

2 个答案:

答案 0 :(得分:0)

请确保您的用户名&#39;是DB中的匹配列名,可以添加echo语句,例如echo&#39; A&#39 ;;回声&#39; B&#39 ;;确定未定义索引的确切位置错误是什么?

答案 1 :(得分:0)

您可以在SQL层中处理此问题。该提议是通过用户名或用户ID查找用户记录。因此,在SQL(CodeIgniter Active Record)中,您可以将其标记为:

$this->db->select('*')
         ->from('users')
         ->where(['user_id' => $user_id])
         ->or_where(['user_name'] => $user_id])
         ->limit(1);

在这种情况下,我们假设$user_id可以是字符串(user_name)或整数(user_id)。我们还假设您没有数字的user_names,并且可能偶然匹配user_id。要防止返回多行,您可以向查询添加limit

获得用户记录后,您需要在其他查询中传入找到的用户记录的user_id,而不是传递给该函数的user_id。