【问题标题】:passing user information to view in codeigniter传递用户信息以在 codeigniter 中查看
【发布时间】:2017-07-24 12:10:00
【问题描述】:

我正在尝试从数据库中获取用户详细信息并将其放入会话中,以便可以在视图中使用它。我已尽我所能,但我不断出错。未定义的可变电子邮件。

型号

function login($username, $password)
    {
        $this->db->select('authTbl.id, authTbl.password, authTbl.username, authTbl.email, authTbl.mobile');
        $this->db->from('users as authTbl');
        $this->db->where('authTbl.username', $username);
        $this->db->where('authTbl.isDeleted', 0);
        $query = $this->db->get();

        $user = $query->result();

        if(!empty($user)){
            if(verifyHashedPassword($password, $user[0]->password)){
                return $user;
            } else {
                return array();
            }
        } else {
            return array();
        }
    }

控制器

function isLoggedIn()
    {
        $isLoggedIn = $this->session->userdata('isLoggedIn');
        $data['title'] = 'Login';
        if(!isset($isLoggedIn) || $isLoggedIn != TRUE)
        {
            $this->load->view('templates/header');
            $this->load->view('users/login', $data);
            $this->load->view('templates/footer');
        }
        else
        {
            redirect('posts');
        }
    }

    /**
     * This function used to logged in user
     */
    public function login()
    {
        $this->load->library('form_validation');
        $data['title'] = 'Login';
        $this->form_validation->set_rules('username', 'Username', 'required|max_length[128]|trim');
        //$this->form_validation->set_rules('password', 'Password', 'required|max_length[32]|');

        if($this->form_validation->run() === FALSE)
        {
            $this->load->view('templates/header');
            $this->load->view('users/login', $data);
            $this->load->view('templates/footer');
        }
        else
        {
            $username = $this->input->post('username');
            $password = $this->input->post('password');

            $result = $this->user_model->login($username, $password);

            if(count($result) > 0)
            {
                foreach ($result as $res)
                {
                    $sessionArray = array('id'=>$res->id,                    
                                            'username'=>$res->username,
                                            'email'=>$res->email,
                                            'mobile'=>$res->mobile,
                                            'isLoggedIn' => TRUE
                                    );

                    $this->session->set_userdata($sessionArray);
                    $this->session->set_flashdata('user_login', 'Welcome');
                    redirect('posts');
                }
            }
            else
            {
                $this->session->set_flashdata('login_fail', 'Email or password mismatch');

                redirect('users/login');
            }
        }
    }

查看

<?php echo $email; ?>

【问题讨论】:

  • 你没有通过$data传递'$email`变量来查看
  • 是的。使用会话
  • 试试这个$this->session->userdata('email');
  • $this->session->userdata('email');应该放在视图中吗?
  • 是的把&lt;?php echo $this-&gt;session-&gt;userdata('email');?&gt;

标签: php codeigniter session login


【解决方案1】:

您正在为用户信息创建会话

尝试获取会话数据:

echo $this->session->userdata('email');

或试图在视图 $data 中传递数据

【讨论】:

    【解决方案2】:

    $email 将不起作用,因为编写 $email 意味着普通变量,但在您的情况下,您必须编写如下:

    <?php echo $this->session->userdata('email'); ?>
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 flashdata,那么您可以使用以下代码获取它:

      控制器

      if (empty($this->session->userdata('UserID'))) {
                  $this->session->set_flashdata('flash_data', 'You don\'t have access!');
                  $this->load->view("initialHeader");
                  $this->load->view("login");
                  redirect('Login');
              }
      

      查看

      <?php if(!empty($this->session->flashdata('flash_data'))) {
                                      ?>
                                      <div class="alert alert-danger">
                                          <?php echo $this->session->flashdata('flash_data'); ?>
                                      </div>
      
                                  <?php } ?>
      

      如果您使用 tmp 数据作为会话,请参考以下代码:

      控制器

      <?php 
      if (!empty($data)) {
                  $this->session->set_userdata('permission_error_msg', $data);
                  $this->session->mark_as_temp('permission_error_msg', 10); // For 10 Seconds
                  $this->load->view('dashboard', array($title, $data));
              } ?>
      

      查看

      <?php if ($this->session->tempdata('permission_error_msg')) { ?>
          <b class="login_error_msg"><?php
              if (!empty($this->session->tempdata('permission_error_msg'))) {
                  echo $this->session->tempdata('permission_error_msg');
              }
              ?></b>
      <?php } ?>
      

      谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-27
        • 2016-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多