2014-10-07 2 views
0

Что бы я хотел создать, в основном что-то подобное, как в Facebook. Если пользователь разместил свое имя пользователя, ссылка будет выглядеть так: www.mysite.com/user/{username}, если бы ссылка не была такой: www.mysite.com/user/{userid}. С приведенными ниже кодами я получаю undefined индексы для всех полей, которые я пытаюсь извлечь из dataabase. Он работает только с user_id, но не с именем пользователя. Любая помощь приветствуется.CodeIgniter получить userinfo по имени пользователя, если имя пользователя существует, если не получить по адресу userID

Ссылка на профили (по количеству просмотров):

<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'); 
    } 
} 

ответ

0

Возможно, вы справитесь с этим в своем SQL-слое. Предложение состоит в том, чтобы найти запись пользователя либо по имени пользователя, либо по их идентификатору пользователя. Таким образом, в 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_id. Чтобы предотвратить возврат нескольких строк, вы можете добавить запрос limit.

После того, как у вас есть запись пользователя, вам необходимо передать в user_id пользовательскую запись в других запросах вместо переданного пользователем функции user_id.

+0

or_where сделал трюк, приветствует брата! :) – Cooper

0

Пожалуйста, убедитесь, что ваш «имя пользователя» спичка имя столбца в БД, и вы можете добавить эхо-операторы, такие как эхо «A»; echo 'B'; точно определить, где ошибка неопределенных индексов?

Смежные вопросы