Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter试图获取非对象的属性_Php_Codeigniter - Fatal编程技术网

Php Codeigniter试图获取非对象的属性

Php Codeigniter试图获取非对象的属性,php,codeigniter,Php,Codeigniter,我使用Codeigniter开发了一个web应用程序。这一切都可以在localHost上完美运行,但现在我将其上传到服务器上,我只有一个问题。除了用户插入错误密码时我的重定向外,其他一切都正常工作。它应该重定向回登录页面并显示一条错误消息(与localhost一起工作),但我得到以下错误 我决定不重定向,只需再次加载我的登录视图,它工作了,但我仍然得到了非对象错误消息的Trying-to-get属性,这很奇怪,因为我没有在localhost上得到这个错误 我的控制器: <?php d

我使用Codeigniter开发了一个web应用程序。这一切都可以在localHost上完美运行,但现在我将其上传到服务器上,我只有一个问题。除了用户插入错误密码时我的重定向外,其他一切都正常工作。它应该重定向回登录页面并显示一条错误消息(与localhost一起工作),但我得到以下错误

我决定不重定向,只需再次加载我的登录视图,它工作了,但我仍然得到了非对象错误消息的Trying-to-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');


    }

  }

}
关注第38行,您的模型返回两种数据类型中的一种,而您的控制器代码不适应它:

$user_id = $this->Login_model->login_user($email, $password)->user_id;
应改为:

$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
}
更好的选择是重命名一些变量,如下所示:

$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

例2

建议您使用小写字母声明和访问模型,例如#2;这会让你的生活更轻松


根据OPs代码和注释,他们似乎已经使用示例1加载了模型,因此仅仅建议使用
$this->login_model
将进一步破坏代码。

那么,第38行和第39行是什么?您的控制器似乎完全缺少类构造函数,例如
class Login extensed CI\u controller{
噢,对不起,我没有粘贴整个控制器代码,只有函数,类在那里,与您的注释完全相同。第38行和第39行如下:$user\u id=$this->Login\u model->Login\u user($email,$password)->user_id;$first_name=$this->Login_model->Login_user($email,$password)->first_name;
Login_model
是否加载了?通常模型名称是通过小写形式声明和访问的,如
$this->Login_model->Login_user()
是的。除了插入错误的电子邮件或密码外,整个应用程序都能正常工作。它确实会获取用户id和名字,因为当我使用正确的数据登录时,它会将我带到我的主页,如果我使用那里的表单将数据发送到我的数据库,它会正确发送数据,包括用户id,并显示登录的用户名字。我知道了,我已经发布了一个答案。根据CodeIgniter文档,模型是以小写形式访问的;应该是
$this->login\u model->
@Sparky我在评论中说了同样的话,但OP说没问题。看着OP的模型代码,我发现返回变量并不总是一个对象。我不是说你没有解决它…我是说OP使用了错误的语法。这:
application/models/Model\u name.php
应该这样访问:
$This->Model\u name->method()
See:工作很有魅力。非常感谢!我是一名编程专业的一年级学生,现在在一家要求我开发此应用程序的公司实习。我想用正确的方法学习它,但我有一些死线,所以我可能跳过了一些重要的步骤。再次感谢。我很抱歉不能对你的答案进行投票,我相信我需要15个信誉点才能做到这一点。你能解释一下为什么控制器不能像我这么做时说的那样容纳它:$user\u id=$this->Login\u model->Login\u user($email,$password)->user_id;@Lberteh,如果您真的想学习如何以正确的方式执行此操作,并拥有在出错时进行故障排除的技能,请花时间阅读CodeIgniter手册。它应该只需要几个小时,包括教程演示:
$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
}
$this->load->model('Login_model');

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

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