2016-05-24 9 views
1

私はCodeigniterを使用してWebアプリケーションを開発しました。それはすべてlocalHostで完璧に動作しますが、私は1つの問題があるサーバーにアップロードしました。ユーザーが間違ったパスワードを入力した場合、私のリダイレクトを除いてすべてが動作します。ログインページにリダイレクトされ、エラーメッセージ(localhostで動作)を表示するはずでしたが、次のエラーが表示されます。Codeigniter非オブジェクトのプロパティを取得しようとしています

image showing errors

私はリダイレクトともう一度私のログインビューをロードしないことを決めた、それが働いていたが、私はまだ私はこれを取得していない奇妙な原因である非オブジェクト・エラー・メッセージのプロパティを取得するためにGETしようlocalhostでエラーが発生しました。

マイコントローラ:

<?php 

defined('BASEPATH') OR exit('No direct script access allowed'); 

class Login extends CI_Controller { 

public function index() 
{ 
    $this->load->view('header'); 
    $this->load->view('login_view'); 
    $this->load->view('footer'); 
} 

public function to_login() { 

$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email'); 
$this->form_validation->set_rules('password', 'Password', 'trim|required'); 

if($this->form_validation->run() == FALSE) { 

    $data = array(

    'errors' => validation_errors() 

); 

    $this->session->set_flashdata($data); 

    redirect('index.php/Login'); 

} else { 

    $email = $this->input->post('email'); 
    $password = $this->input->post('password'); 

    // the following lines are 38 and 39 
    $user_id = $this->Login_model->login_user($email, $password)->user_id; 
    $first_name = $this->Login_model->login_user($email, $password)->first_name; 

    if($user_id) { 

     $user_data = array(

     'user_id' => $user_id, 
     'first_name' => $first_name, 
     'logged_in' => true 

    ); 

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

     redirect('http://gc200322197.computerstudi.es/app/index.php/Main'); 

    } else { 

     $this->session->set_flashdata('login_fail', 'Invalid login. Please check the email and password fields.'); 
     $this->load->view('header'); 
     $this->load->view('login_view'); 
     $this->load->view('footer'); 


    } 

    } 

} 

マイモデル:

<?php 

class Login_model extends CI_Model{ 

    public function login_user($email, $password) { 

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

    $result = $this->db->get('users'); 

    $db_password = $result->row(4)->password; 

    if(password_verify($password, $db_password)) { 

     return $result->row(0); 

    } else { 

     return false; 

    } 

    } 

} 

私は、このエラーについてとても多くの質問を読んで、私はまだ間違っているかを把握できなかったと、なぜそれが動作しますlocalhostとオンラインではありません。私は本当にこれについていくつかの助けに感謝します。う

$user_id = $this->Login_model->login_user($email, $password); // This could be false or an object 

// Check if we've received an object 
if($user_id){ 
    $user_id = $user_id->user_id; // Access the object's property 
    $first_name = $user_id->first_name; // Might as well set the first name as well 
} 

より良いオプション:ライン#38を中心に

+0

だから、どれが#38と#39行ですか?あなたのコントローラーは 'class Login extends CI_controller {' – MonkeyZeus

+0

のようなクラスコンストラクターを完全に欠いているようです。ああ、申し訳ありません、コントローラーコード全体を貼り付けていない、関数のみ、クラスはそこにあります。コメント。 38行目と39行目は次のとおりです。 $ user_id = $ this-> Login_model-> login_user($ email、$ password) - > user_id; $ first_name = $ this-> Login_model-> login_user($ email、$ password) - > first_name; – Lberteh

+1

'Login_model'はロードされていますか?通常、モデル名は '$ this-> login_model-> login_user();のように小文字で宣言され、アクセスされます。 – MonkeyZeus

答えて

1

、あなたのモデルは、2つのデータ型のいずれかを返しているし、あなたのコントローラのコードは、それを収容していません。

$user_id = $this->Login_model->login_user($email, $password)->user_id; 

を変更する必要があるにこのようないくつかの変数の名前を変更する:

$user_info = $this->Login_model->login_user($email, $password); // This could be false or an object 

// Check if we've received an object 
if($user_info){ 
    $user_id = $user_info->user_id; // Access the object's property 
    $first_name = $user_info->first_name; // Might as well set the first name as well 
} 

更新:

CodeIgniterのモデルについて混乱し、誰のために、v3.0.4に言えば、以下参照:

例1

$this->load->model('Login_model'); 

$this->Login_model->some_func(); // Works 
$this->login_model->some_func(); // Fails 

例2

$this->load->model('login_model'); 

$this->Login_model->some_func(); // Fails 
$this->login_model->some_func(); // Works 

例#2の小文字のモデルを宣言してアクセスすることをお勧めします。あなたの人生を楽にします。

OPコードとコメントに基づいて、例#1を使用してモデルを読み込んだので、$this->login_modelを使用するように示唆するだけで、コードがさらに壊れてしまいます。

+0

CodeIgniterのドキュメントに従って、モデルはすべて小文字でアクセスされます。 '$ this-> login_model->' – Sparky

+0

@ Sparkyコメントにも同じことを言いましたが、OPはそれは問題ないと言っています。 OPのモデルコードを見ると、戻り変数は必ずしもオブジェクトではないことがわかりました。 – MonkeyZeus

+0

私はあなたがそれを解決しなかったというわけではありません...私はOPが間違った構文を使用していると言っています。これは 'application/models/Model_name.php'は次のようにアクセスする必要があります:' $ this-> model_name-> method(); 'See:http://www.codeigniter.com/user_guide/general/models.html#モデルの解剖 – Sparky

関連する問題