2014-11-28 6 views
0

Это мой контроллер:пользовательские данные сеанса получить ошибку

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class admin extends ci_controller{ 


function __construct(){ 

    parent::__construct(); 

    $this->load->library('session'); 
    $this->load->helper(array('form', 'url', 'security', 'html')); 
    $this->load->library('form_validation'); 
    $this->load->model($this->config->item('admin_model'), 'admin_db_connection', TRUE); 
    //$this->load->model('admin_model' ,TRUE); 
    //$this->load->helper('security'); 
    $this->load->helper('date'); 
    //$this->load->library('Ajax'); 
    $this->load->library("pagination"); 
    $this->load->database(); 
    $this->load->helper('url'); //You should autoload this one ;) 
} 



public function index(){ 
    $this->load->view('admin/login'); 
} 


public function check_admin(){ //echo'admin'; 

    $this->load->helper('form'); 
    $this->form_validation->set_rules('admin_name','admin name','trim|required|xss_clean'); 
    $this->form_validation->set_rules('email','Email','trim|required|xss_clean'); 

    $this->form_validation->set_rules('password','password','trim|required|xss_clean'); 

    if($this->form_validation->run()== FALSE) 
    { //echo 'invalid login '; 
     $this->index(); 
    } 
    else 
    { 
     $data=array(); 
     $data['admin_name']=$this->input->post('admin_name',true); 
     $data['email']=$this->input->post('email',true); 
     $data['password']=$this->input->post('password',true); 
     //echo "<pre>"; 

     if ($query = $this->admin_db_connection->check_admin_validation($data)) 
     { 
      // print_r($po);exit; 
      $newdata=array 
      (
      'id' => $query[0]['id'], 
      'admin_name' => $query[0]['admin_name'], 
      'email'=>$query[0]['email'], 
      'status' => $query[0]['status'], 
      'sign_in'=>TRUE 
      ); 
      // echo "<pre>"; 
      //print_r($newdata);exit; 

      $this->session->set_userdata('auth', $newdata); 
      //$return= true; 
      //print_r($auth);exit; 
      redirect('dashboard'); 
      return TRUE; 
     } 
     else 
     { 
      echo 'invalid login'; 

      $this->index(); 
      //redirect('admin/index', 'refresh'); 
      return FALSE; 
     } 
    } 
} 

    function logout() 
    { 

    $this->session->sess_destroy(); 
    redirect('admin'); 
    } 
} 
?> 

Это моя модель:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class admin_model extends ci_model{ 


function check_admin_validation($data){ 
    $this->session->userdata('auth'); 
    $this->db->select('*'); 
    $this->db->from('admin_user'); 
    $this->db->where('admin_name' , $data['admin_name']); 
    $this->db->where('email', $data['email']); 
    $this->db->where('password', $data['password']); 
    $query=$this->db->get(); 
    if($query->num_rows()>0) 
    { 
     $resulet=$query->result_array(); 
     $query->free_result(); 
     return $resulet; 
    } 
    else   
    { 
     return false; 
    } 
    } 
} 
?> 

Когда я использую этот код $this->session->set_userdata($newdata); вместо $this->session->set_userdata('auth', $newdata); то работает, но выше код Безразлично» т. Может ли кто-нибудь сказать мне, где проблема?

+0

Пожалуйста, не кричите: меньше колпачков используется = люди счастливее, чтобы помочь вам. – Wrikken

+0

Что значит не работает? У вас возникли какие-либо ошибки? ИЛИ каким образом вы получаете доступ к данным сеанса, выполните подробнее. –

ответ

0

Если я не ошибаюсь, вторым параметром для функции set_userdata является строка, тогда как вы передаете массив.

Возможно, поэтому ваш код не работает.

0

Способ установки значения сеанса на CodeIgniter является

$this->session->set_userdata('some_name', 'some_value'); 
//some_value should not be array 
//But your are setting array as value which is wrong. 

$this->session->set_userdata($newdata); 
//This will set each array key to your session. 
//That's why it is working 

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

$this->session->set_userdata("auth",json_encode($newdata); 

Теперь вы можете retrive данные,

$auth=json_decode($this->session->userdata("auth")); 

пожалуйста, посмотрите на CodeIgniter documentation

+0

теперь я могу печатать $ auth, но не перенаправлять свою панель. Это мой индекс индекса служебной информации индекса() {// echo 'dad'; \t \t \t \t \t $ auth = $ this-> session-> userdata ('auth'); \t \t \t // print_r ($ auth); exit; \t \t \t $ this-> load-> view ('admin/dashboard1', $ auth); \t \t \t} –

+0

если вы отправляете $ auth свой взгляд, вы получите их при просмотре ключей этого массива как переменные. Подобным образом «$ id, $ admin_name, $ email» снова, если вы хотите получить массив в своем представлении вы можете так называть это '$ this-> load-> view ('admin/dashboard1', array (" auth "=> $ auth));' теперь вы получите как $ auth в своем представлении, как array.Hope вы понимаете: –

+0

помните, что это должно быть '$ auth = json_decode ($ this-> session-> userdata (" auth "));' not' $ auth = ($ this-> session-> userdata ("auth")); 'если вы установили свой сеанс' $ this-> session-> set_userdata ("auth", json_encode ($ newdata); ' –

0

спасибо, что я решил свою проблему. Спасибо всем и stackoverflow, потому что если я не отправлю здесь, я не могу найти свой ответ. Проблема в том, что моя панель инструментов прошла неправильное значение «sing_in» правильное значение «auth».

if (!$this->session->userdata('sing_in')) 
      { 
       redirect('admin'); 
      }`enter code here` 
Смежные вопросы