Получите только личную запись БД, а не все записи

Когда вы входите на мой сайт, вы будете напрямую перенаправлены на страницу своих профилей. Чтобы вы могли видеть свое имя, телефон, электронную почту и т.д. Но в тот момент, когда я вхожу на свой сайт, меня направляют на мою страницу профиля, но я получаю все данные для каждого пользователя в моей БД. Поэтому я получаю имя каждого пользователя, телефон каждого пользователя и т.д. Я хочу получить данные только того, кто вошел в систему. Как я могу это достичь? Я подумал об этом и придумал, where userID = ID of the user HERE Но я не знаю, где я смогу получить идентификатор этого пользователя. При входе в систему я начинаю сеанс, так что мне нужно сохранить зарегистрированный идентификатор пользователей в сеансе? Или это не безопасно?

Я изучаю и работаю с CodeIgniter, поэтому я делаю это в шаблоне MVC.

Контроллер, где я вхожу в систему и устанавливаю сеанс

if($query){
 $data = array(
 'username' => $this->input->post('loginEmail'),
 'is_logged_in' => true
 );
 $this->session->set_userdata($data);

контроллер

if($logged_in){
 //if the user is logged in 
 $this->load->model('profile_model');

 if($query = $this->profile_model->userInfo()){
 $data['records'] = $query;
 $data['content'] = 'profile_view';
 $this->load->view('templates/template', $data);
 }
}

Модель

class Profile_model extends CI_Model{

 function userInfo(){
 $query = $this->db->get('tbl_users');
 return $query->result();
 }
}

Посмотрите, где я хочу показать свои данные

if(isset($records)){
 foreach($records as $row){
 echo $row->username;
 echo $row->cellphone;
 }
}
1 ответ

Все, что вам не хватает, это инструкция WHERE в вашей модели. В качестве аргумента для оператора WHERE вы можете использовать переменную сеанса, содержащую ваш адрес электронной почты (если ваша таблица базы данных хранит электронные письма в поле "username":

class Profile_model extends CI_Model{

 function userInfo(){

 $this->db->where('username', $this->session->userdata('username'));

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

 return $query->result();

 }

}

Или вы можете передать электронное имя/имя пользователя модели с контроллера:

if($logged_in){
 //if the user is logged in 
 $this->load->model('profile_model');
 $username = $this->session->userdata('username');

 if($query = $this->profile_model->userInfo($username)){
 $data['records'] = $query;
 $data['content'] = 'profile_view';
 $this->load->view('templates/template', $data);
 }
}

а затем в вашей модели:

class Profile_model extends CI_Model{

 function userInfo($username){

 $this->db->where('username', $username);

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

 return $query->result();

 }

}

Я не знаю, как ваши столбцы указаны в вашей базе данных, или я могу быть более точным.

Если имена пользователей в базе данных отличаются от адресов электронной почты, измените строку в модели на:

$this->db->where('email', $username);

Надеюсь это поможет!

licensed under cc by-sa 3.0 with attribution.