0

私のサイトにログインすると、直接プロフィール ページに移動します。名前、電話番号、電子メールなどを確認できるようにします。ただし、自分のサイトにログインすると、自分のプロフィール ページに移動しますが、DB 内のすべてのユーザーのすべてのデータを取得します。したがって、すべてのユーザーの名前、すべてのユーザーの電話などを取得しています。ログインした人のデータのみを取得したいのですが、どうすればこれを達成できますか? いろいろ考えた結果、思いついたのwhere userID = ID of the user HERE ですが、どこでこのユーザーのIDを取得できるのかわかりません。ログイン時にセッションを開始するので、ログインしたユーザー ID をセッションに保存する必要がありますか? それとも安全ではないですか?

私はCodeIgniterを学んで使っているので、MVCパターンでやっています。

ログインしてセッションを設定するコントローラー

if($query){
    $data = array(
             'username' => $this->input->post('loginEmail'),
             'is_logged_in' => true
            );
    $this->session->set_userdata($data);

コントローラ

if($logged_in){
    //if the user is logged in 
    $this->load->model('profile_model');

    if($query = $this->profile_model->userInfo()){
        $data['records'] = $query;
            $data['content'] = 'profile_view';
            $this->load->view('templates/template', $data);
    }
}

モデル

class Profile_model extends CI_Model{

    function userInfo(){
        $query = $this->db->get('tbl_users');
        return $query->result();
    }
}

データを表示したい場所を表示する

if(isset($records)){
    foreach($records as $row){
        echo $row->username;
        echo $row->cellphone;
    }
}
4

1 に答える 1

1

欠けているのは、モデル内の WHERE ステートメントだけです。WHERE ステートメントの引数として、電子メール アドレスを含むセッション変数を使用できます (データベース テーブルが「username」というフィールドに電子メールを格納すると仮定します。

class Profile_model extends CI_Model{

    function userInfo(){

        $this->db->where('username', $this->session->userdata('username'));

        $query = $this->db->get('tbl_users');

    return $query->result();

    }

}

または、コントローラーからモデルに電子メール/ユーザー名を渡すことができます。

if($logged_in){
    //if the user is logged in 
    $this->load->model('profile_model');
    $username = $this->session->userdata('username');

    if($query = $this->profile_model->userInfo($username)){
        $data['records'] = $query;
            $data['content'] = 'profile_view';
        $this->load->view('templates/template', $data);
    }
}

そしてあなたのモデルで:

class Profile_model extends CI_Model{

    function userInfo($username){

        $this->db->where('username', $username);

        $query = $this->db->get('tbl_users');

    return $query->result();

    }

}

データベースで列に名前が付けられているか、もっと正確に言えばわかりません。

データベース内のユーザー名が電子メール アドレスと異なる場合は、モデル内の行を次のように変更します。

$this->db->where('email', $username);

お役に立てれば!

于 2013-07-21T15:44:49.457 に答える