找不到对象!在Codeigniter登录

时间:2016-12-15 11:07:40

标签: php codeigniter

我是Codeigniter的新手,我正在尝试按照一些教程构建一个登录表单。但是,当我尝试提交登录表单以验证通过在登录控制器中调用validate_login函数输入的凭据时,我得到“找不到对象”错误。每次我点击提交按钮时,我的网址都会重定向到“http://localhost/pgevCI/login/validate_login”,但仍然会收到“找不到对象”错误。

控制器:login.php

<?php

class Login extends CI_Controller {

    function index()
    {
        $data['main_content'] = 'view_login';
        $this->load->view('includes/login_template', $data);    
    }
function validate_login()
    {
        $this->load->model('model_accounts');
        $valid = $this->model_accounts->validate();

        if($valid)
        {
            $data = array(
                'userid' => $this->input->post('userid'),
                'is_logged_in' => true
            );

            $this->session->set_userdata($data); 
            redirect('site/admin');
        }

        else
        {
            $this->index();
        }       
      }
    }

查看表单:view_login.php

<form action="<?php echo base_url(); ?>login/validate_login" method="POST">
    <div class="row">
      <div class="col-lg-6">
        <div class="form-group">
          <input type="text" name="userid" class="form-control" id="user-name" aria-label="..." placeholder="Enter your username">
        </div><!-- /input-group -->
      </div><!-- /.col-lg-6 -->

      <div class="col-lg-6">
        <div class="form-group">
          <input type="password" name="password" class="form-control" id="user-password" aria-label="..." placeholder="Enter your password">
        </div><!-- /input-group -->
      </div><!-- /.col-lg-6 -->
    </div><!-- /.row -->

    </br>
    </br>
    <!-- Standard button -->
    <div class="action-buttons text-center">

      <button type="submit" class="btn btn-custom">Sign In</button>

      <button type="button" class="btn btn-custom">Forgot your password?</button>

    </div>
  </form>

型号:model_accounts.php         

class Model_accounts extends CI_Model {

    function validate() 
    {

        $this->db->where('userid', $this->input->post('userid'));
        $this->db->where('password', md5($this->input->post('password')));
        $query = $this->db->get('users');

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

            return true;    
        }
    }
}

基本网址&amp;索引文件:

$config['base_url'] = 'http://localhost/pgevCI/';
$config['index_page'] = 'index.php';

Error Page

真的很感激任何帮助! :)

3 个答案:

答案 0 :(得分:0)

在你的控制器中添加以下内容......

function __construct()
{
$this->load->helper('url');
}

您必须加载帮助url,以便可以使用base_url()

如果没有工作评论我可以在codeigniter中提供更多帮助。谢谢。

如果您使用autoload.php进行加载,请在TRUE中制作此congig.php

$config['composer_autoload'] = TRUE;

哦,你的错误就在这里....你想加载视图view_login,但在你的代码中加载了什么视图,请仔细阅读。所以

替换

 function index()
    {
        $data['main_content'] = 'view_login';
        $this->load->view('includes/login_template', $data);    
    }

通过

function index()
{
    $this->load->view('includes/login_template/view_login');    
}

另外

<form action="<?php echo base_url('index.php/login/validate_login');" method="POST">

对于Model,首先使用以下代码将文件保存为Model_accounts.php

class Model_accounts extends CI_Model {

    function validate() 
    {

        $this->db->where('userid', $this->input->post('userid'));
        $this->db->where('password', md5($this->input->post('password')));
        $query = $this->db->get('users')->result_array();

        if(count($query)==1)
        {

            return true;    
        }
    }
}

或者只是替换它

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

            return true;    
        }

通过

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

            return true;    
        }

希望如果您的模型中的代码正确,它将会起作用。

答案 1 :(得分:0)

你必须使用

<?php echo site_url('login/validate_login') ?>

而不是

<?php echo base_url(); ?>login/validate_login

您尚未将CI设置为使用不错的网址,因此您的真实重定向网址为

http://localhost/pgevCI/index.php/login/validate_login

你必须设置

$config['index_page'] = '';

如果您希望网址显示为

,请使用htaccess
http://localhost/pgevCI/login/validate_login

答案 2 :(得分:0)

你必须提及&#39; index.php&#39;在你的每个网址。避免重复只需修改

后的配置基本网址即可
$config['base_url'] = 'http://localhost/pgevCI/';

change this to

$config['base_url'] = 'http://localhost/pgevCI/index.php';