Привет, ребята, у меня есть пользовательский контроллер и модель User_model . Я хочу иметь возможность извлекать и отображать зарегистрированную электронную почту и номер телефона пользователя из базы данных в представление после входа пользователя в систему. Любая идея, как я могла бы это сделать, была бы оценена, и если бы коды могли быть написаны для демонстрации I будет очень счастлив.
МОДЕЛЬ
public function login($username, $password){ //validation $this->db->select('id, email, username'); $this->db->where('username', $username); $this->db->where('password', $password); $this->db->where('status', 1); $result = $this->db->get('users'); if($result->num_rows() == 1){ return $result->row(0)->id; } else { return FALSE; } } public function get_user($username){ $this->db->where('username', $username); $query = $this->db->get('users'); return $query->result(); }
ДИСПЕТЧЕР:
public function login(){ $data['title'] = 'Login'; $this->form_validation-> set_rules('username', 'Username', 'required'); $this->form_validation-> set_rules('password', 'Password', 'required'); if($this->form_validation->run() === FALSE){ $this->load->view('templates/header'); $this->load->view('users/login', $data); $this->load->view('templates/footer'); } else { // fetching user $username = $this->input->post('username'); //Encrypted password $password = md5($this->input->post('password')); //login user $user_id = $this->user_model->login($username, $password); if($user_id){ //creating session $user_data = array( 'user_id' => $user_id, 'username' => $username, 'logged_in' => TRUE, ); $this->session->set_userdata('user_data',$user_data); // Set message to be sent $this->session->set_flashdata('user_login', 'Welcome'); redirect('posts'); } else { // Set message to be sent $this->session->set_flashdata('login_fail', 'Login Failed'); redirect('users/login'); } } } public function get_user() { if($this->session->userdata('logged_in')){ $username = $this->session->userdata('username'); $data['results'] = $this->user_model->get_user($username); $this->load->view('templates/header'); $this->load->view('users/login', $data); $this->load->view('templates/footer'); } }
Когда вы входите в систему, если вы установите user_id в сеансе, вы можете получить информацию, подобную
Также прочтите руководство
Убедитесь, что вы загрузили сеанс автозагрузки и базу данных.
Примеры ТОЛЬКО ниже.
Имя файла: User_model.php
class User_model extends CI_Model { public function get_user($id) { $this->db->where('user_id', $id); $user_query = $this->db->get('yourtable'); return $user_query->row_array(); } }
Имя файла: Dashboard.php
контроллер
<?php class Dashboard extends CI_Controller { public function __construct() { parent::__construct(); if (!$this->session->userdata('user_id')) { redirect('logoutcontroller'); } $this->load->model('user_model'); } public function index() { $userdata = $this->user_model->get_user($this->session->userdata('user_id')); /** You can use what you want example $data['email'] = $userdata['email']; **/ $data['username'] = $userdata['username']; $this->load->view('some_view', $data); } }
Посмотреть
<?php echo $username;?>
Вы можете использовать сеанс для переноса зарегистрированной детали пользователя.
Это ваш код модели:
//In your model $query = $this->db ->select('id,email,phone') ->where(['username' => $username, 'password' => $password]) ->where('status','1') ->get('users'); $user_data = $query->row_array(); if (!empty($user_data)) { return $user_data; } else { return FALSE; }
На стороне контроллера, где вы получаете данные пользователя, если username
и password
верны. Здесь вы можете поместить пользовательские данные в сеанс:
//In Side Controller $user_data = $this->user_model->login($username, $password); if(isset($user_data) && !empty($user_data)){ // you can directly add the `$user_data` to the session as given billow. // set user data in session $this->session->set_userdata('user_data', $user_data);
Теперь, после ввода данных в сеанс, вы можете получить его в любом месте, на любом представлении или в боковом море, контроллере.
//retrive the user data in any view //To echo in view Inside your view code. <?php $session_data = $this->session->userdata('user_data'); $user_email = $session_data['email']; $user_phone = $session_data['phone']; $user_id = $session_data['id']; ?> <?= $user_phone ?> OR <?php echo $user_phone; ?> <?= $user_email ?> OR <?php echo $user_email; ?>
В вашем представлении $this->load->view('users/login', $data);
этот вид. Где размещен код HTML
и PHP
. Пример:
<html> // Your View Page </body> <?php $session_data = $this->session->userdata('user_data'); $user_email = $session_data['email']; $user_phone = $session_data['phone']; $user_id = $session_data['id']; ?> <h1> Logged In User Email: <?= $user_email ?> </h1> <h1> Logged In User Phone: <?= $user_phone ?> </h1> <body> </html>
Примечание. После сохранения пользовательских данных внутри сеанса вам не нужно передавать эти данные в контроллер формы представления. Вам просто нужно откликнуться, где вам это нужно.
Сначала необходимо загрузить библиотеку сеансов. как
$this->load->library('session');
Затем, после того как вы сможете сохранить свои данные в сеансе,
$newdata = array( 'username' => 'johndoe', 'email' => 'johndoe@some-site.com', 'logged_in' => TRUE ); $this->session->set_userdata($newdata);
Затем, когда вы требуете от контроллера, вы можете извлекать данные сеанса, например,
$data['session_data'] = $this->session->all_userdata();
и затем перейдите к вашему представлению,
$this->load->view('data', $data);
и затем получить доступ к этим данным в вашем представлении с помощью ключа,
<?= $session_data['username']; ?>
Я надеюсь, что это помогает,
Отвечает ли это на ваш вопрос?
public function login($username, $password){ $db = $this->db; //validation $db->select('id, email, username'); $db->where('username', $username); $db->where('password', $password); $db->where('status', 1); $result = $db->get('users')->row_array(); return empty($result['id']) ? false : $result['id']; }
С уникальным индексом по имени пользователя вам не нужно будет проверять количество строк, так как оно будет ограничено 1.
if($user_id){ //creating session $user_data = array( 'user_id' => $user_id, 'username' => $username, 'logged_in' => TRUE, ); $this->session->set_userdata($user_data); // Set message to be sent $data['session_data'] = $this->session->all_userdata(); $this->session->set_flashdata('user_login', 'Welcome'); $this->load->view('posts', $data); //redirect('posts'); } else { // Set message to be sent $this->session->set_flashdata('login_fail', 'Login Failed'); redirect('users/login'); } }
на вид,
<?php print_r($session_data); ?>
если вы получите данные сеанса в печать, вы можете отобразить его как,
<?= $session_data['user_id']; ?>
В вашем контроллере есть основная проблема
Проблема с данными сеанса: в вашем контроллере вы сохраняете все данные массива в сеансе CodeIgniter:
«user_data» будет работать как массив, и все остальные массивы будут назначаться как данные ключей;
$this->session->set_userdata('user_data', $user_data);
и вы извлекаете / проверяете данные сеанса, используя $this->session->userdata('logged_in')
и $this->session->userdata('username')
Это неправильно, мой друг. Вы можете получить сеанс пользовательских данных с помощью $this->session->userdata('user_data')['username']
или $this->session->userdata['user_data']['username']
…
Потому что сессия будет похожа;
Array ( [__ci_last_regenerate] => 1499791562 // This is the array key 'user_data' where your array data stores [user_data] => Array ( [user_id] => 1 [username] => scott [email] => scott.dimon@example.com [phone_number] => 1234567890 [first_name] => Scott [logged_in] => 1 ) )
Одна вещь, которую я хотел бы рассказать всем, всегда внимательно прочитайте документы и руководство. Поверьте мне, если вы прочтете перед началом, ваш код будет более приятным и чистым … Ха-ха-ха-ха-ха ..;): |
**** Модальные **
//Логин пользователя**
function userlogin($data) { $condition = "username =" . "'" . $data['username'] . "' AND " . "password =" . "'" . $data['password'] . "' AND " . "status = '1'"; $this->db->select("*"); $this->db->from("user"); $this->db->where($condition); $this->db->limit(1); $query = $this->db->get(); if ($query->num_rows() == 1) { return $query->result(); } else { return false; } }
И в вашей контрольной проверке
if($this->modal_name->login()==false) { //redirect user to login page } else { $data['details'] = $this->modal_name->login(); $this->load->view("post",$data); }
Посмотреть
foreach($details as $detail) { echo $detail->id; echo $detail->username; }