0

私はコードイグナイターとMVCPHPに不慣れで、オンラインリソースを使用して基本的なログインシステムを作成し、それが機能します。現在、学習するためにそれを改善しようとしています...

私のモデル:

function validate(){


            $this->db->where('Email', $this->input->post('email'));
            $this->db->where('Password', sha1($this->input->post('password')));
            $query = $this->db->get('admin_users');

        if($query->num_rows == 1){

            return true;
        }

    }

    function get_admininfo(){


        $this->db->where('Email', $this->session->userdata('email'));
        $query = $this->db->get('admin_users');

        return $query->result();
    }

あるユーザーが、通知などのアバターのために、情報の一部を取得してセッションに保存することを確認しました。

私のコントローラーは次のようになります。

 function validate_credentials(){

        //load the adminship model and then the function validate within it.
        $this->load->model('adminship_model');
        $query = $this->adminship_model->validate();

        // If the admin user successfully validated.
        if($query){

            $admininfo = $this ->adminship_model->get_admininfo();

            $data = array(

                'email' => $this->input->post('email'),
                'username' => $this->$admininfo['username'],
                'is_logged_in' => true
            );

            $this->session->set_userdata($data);
            redirect('dashboard_controller/dashboard');


        }else{

           $this->index();

        }

    }

ダッシュボードコントローラーで次のように設定しました。

        $data['email'] = $this->session->userdata('email');
        $data['email'] = $this->session->userdata('username');

そしてそれをビューに渡し、$ emailをエコーするとメールが届きますが、ユーザー名がプルされない場合、次のエラーが発生します。

メッセージ:未定義のインデックス:ユーザー名

この行:

'username' => $this->$admininfo['username'],

モデルから間違った方法で情報を取得していることはわかっています。誰かが私を正しい方向に向けてくれませんか。

4

2 に答える 2

0

モデル関数を次のように変更してみてください。

 function get_admininfo(){
    $this->db->where('Email', $this->session->userdata('email'));
    $query = $this->db->get('admin_users');

    if($query->num_rows() == 1){
       foreach($query->result() as $row){
            $data = $row;
       }
       return $data;

    } else {
    return FALSE;
    }
 }

次に、次の方法でデータを取得してみます。

   $admininfo = $this ->adminship_model->get_admininfo();
        $data = array(

            'email' => $this->input->post('email'),
            'username' => $admininfo->username,
            'is_logged_in' => true
        );

編集

all_userdata()あなたがそれを使うつもりなので、手に入れてみてください:

$data['userdata'] = $this->session->all_userdata(); // returns an associative array

次に、それをビューに渡し、を使用してビューに表示し$userdata['username']ます。これは通常、私にとっては問題なく機能します。

オプション

上記のコードが機能しない場合、おそらく最も簡単な方法は、次のように列の名前を指定することです。

function get_admininfo(){
    $this->db->where('Email', $this->session->userdata('email'));
    $query = $this->db->get('admin_users');

    if($query->num_rows() == 1){
        $row = $query->row(); 
        return $row->username; //assuming this is the name of the column
    } else {
    return FALSE;
    }
 }

コントローラコードを次のように変更します。

        $admininfo = $this ->adminship_model->get_admininfo();
        $data = array(

            'email' => $this->input->post('email'),
            'username' => $admininfo,
            'is_logged_in' => true
        );
于 2013-02-24T22:50:49.437 に答える
0

関数

function get_admininfo(){


    $this->db->where('Email', $this->session->userdata('email'));
    $query = $this->db->get('admin_users');

    return $query->result();
}

クエリをオブジェクトとして返そうとしています

      $admininfo = $this ->adminship_model->get_admininfo();

        $data = array(

            'email' => $this->input->post('email'),
            'username' => $this->$admininfo['username'],
            'is_logged_in' => true
        );

$data['username'] を $this->admininfo から期待される配列値に設定しようとしていますが、オブジェクトが返されました

変更してみてください:

return $query->result();

return $query->row_array();
于 2013-02-25T01:24:47.940 に答える