Codeigniter User's Data

℡╲_俬逩灬. 提交于 2019-12-03 18:16:11

问题


Hi guys I have a User controller and User_model model. I want to be able to retrieve and display a logged in users email and phone number from the database to a view after the user is logged in. any idea how I could go about this would be appreciated and if codes could be written to demonstrate I would be very happy.

MODEL

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

CONTROLLER:

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

  }

回答1:


There is basic problem in your Controller

Session Data Problem: In your Controller you storing all array data in CodeIgniter Session:

the 'user_data' would work like array key, and all other array will be assign as keys data;

$this->session->set_userdata('user_data', $user_data);

and you retrieving/checking the session data by using $this->session->userdata('logged_in') and $this->session->userdata('username'), It's wrong my friend. You can get user data session by $this->session->userdata('user_data')['username'] or $this->session->userdata['user_data']['username'] ...

Because the session would be like;

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
        )

)

So, you have to have use 'user_data' with session to get your data

One thing I would like to share with everyone, Always Read The Docs and manual Carefully. Believe me if you read before the start, your code would be more nicer and cleaner... Ha ha ha ha ha.. ;) :|




回答2:


When you login if you set the users_id in session you can get the information like

Read manual also

  1. https://www.codeigniter.com/user_guide/database/results.html#result-rows
  2. https://www.codeigniter.com/user_guide/general/views.html#adding-dynamic-data-to-the-view

Make sure you autoload session, and database.

Examples ONLY below.

Filename: 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();
 }

 }

Filename: Dashboard.php

Controller

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

 }

View

<?php echo $username;?>



回答3:


You can use session to carry the logged in user detail.

This is your model code:

//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;
    }

In side the controller where you get the user data if username & password is correct. Here you can put the user data on session:

    //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);

Now after putting a data on session you can retrive it any where, on any view or in side morel, controller.

    //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; ?>

On Your $this->load->view('users/login', $data); this view. Where the HTML & PHP code placed. Example:

<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>

Note: Once You save the user data inside the session then you don't need to pass that data to the view form controller. You just need to echo it where you need that.




回答4:


You need to load session library first. like

$this->load->library('session');

Then after you can save your data into session like,

$newdata = array(
    'username'  => 'johndoe',
    'email'     => 'johndoe@some-site.com',
    'logged_in' => TRUE
);

$this->session->set_userdata($newdata);

Then where ever you require at controller you can retrive session data like,

$data['session_data'] = $this->session->all_userdata();

and then pass to your view,

$this->load->view('data', $data);

and then access that data into your view with the key,

<?= $session_data['username']; ?>

I hope it helps,




回答5:


Does this answer your question?

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

With a unique index on username you won't need to check the number of rows as it will be limited to 1.




回答6:


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

at the view,

<?php print_r($session_data); ?>

if you get your session data into print, you can display it like,

<?= $session_data['user_id']; ?>



回答7:


****Modal**

//user login**

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

And in your Controller check

if($this->modal_name->login()==false)
{
//redirect user to login page
}
else
{
  $data['details'] = $this->modal_name->login();
  $this->load->view("post",$data);
}

View

foreach($details as $detail)
{
  echo $detail->id;
  echo $detail->username;
}


来源:https://stackoverflow.com/questions/45001657/codeigniter-users-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!