私はCodeigniterを使用してWebアプリケーションを開発しました。それはすべてlocalHostで完璧に動作しますが、私は1つの問題があるサーバーにアップロードしました。ユーザーが間違ったパスワードを入力した場合、私のリダイレクトを除いてすべてが動作します。ログインページにリダイレクトされ、エラーメッセージ(localhostで動作)を表示するはずでしたが、次のエラーが表示されます。Codeigniter非オブジェクトのプロパティを取得しようとしています
私はリダイレクトともう一度私のログインビューをロードしないことを決めた、それが働いていたが、私はまだ私はこれを取得していない奇妙な原因である非オブジェクト・エラー・メッセージのプロパティを取得するために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を中心に
だから、どれが#38と#39行ですか?あなたのコントローラーは 'class Login extends CI_controller {' – MonkeyZeus
のようなクラスコンストラクターを完全に欠いているようです。ああ、申し訳ありません、コントローラーコード全体を貼り付けていない、関数のみ、クラスはそこにあります。コメント。 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
'Login_model'はロードされていますか?通常、モデル名は '$ this-> login_model-> login_user();のように小文字で宣言され、アクセスされます。 – MonkeyZeus