codeigniter登录系统出错


error in codeigniter login system

所以我得到了这个错误致命错误:在第15行的C:''examplep''htdocs''application''models''user.php中的非对象上调用成员函数num_rows()

查看

<?php echo validation_errors(); ?>
<?php echo form_open('verifylogin'); ?>
 <label for="username">Username:</label>
 <input type="text" size="20" id="username" name="username"/>
 <br/>
 <label for="password">Password:</label>
 <input type="password" size="20" id="passowrd" name="password"/>
 <br/>
 <input type="submit" value="Login"/>

控制器登录:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends CI_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->helper(array('form'));
    $this->load->view('header');
$this->load->view('login_view');
    $this->load->view('footer');
}
}
?>

控制器验证

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class VerifyLogin extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->model('user','',TRUE);
}
function index()
{
//This method will have the credentials validation
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Password',         'trim|required|xss_clean|callback_check_database');
if($this->form_validation->run() == FALSE)
{
 //Field validation failed.  User redirected to login page
 $this->load->view('login_view');
}
else
{
 //Go to private area
 redirect('home', 'refresh');
}
}
function check_database($password)
{
//Field validation succeeded.  Validate against database
$username = $this->input->post('username');
//query the database
$result = $this->user->login($username, $password);
if($result)
{
 $sess_array = array();
 foreach($result as $row)
 {
   $sess_array = array(
     'id' => $row->id,
     'username' => $row->username
   );
   $this->session->set_userdata('logged_in', $sess_array);
 }
 return TRUE;
}
else
{
 $this->form_validation->set_message('check_database', 'Invalid username or password');
 return false;
}
}
}
?>

型号

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Class User extends CI_Model
{
function login($username, $password)
{
$this -> db -> select('gebruiker_id, gebruikersnaam, wachtwoord');
$this -> db -> from('gebruikers');
$this -> db -> where('gebruikersnaam', $username);
$this -> db -> where('wachtwoord', MD5($password));
$this -> db -> limit(1);
$query = $this -> db -> get();
if($query -> num_rows() == 1)
{
 return $query->result();
}
else
{
 return false;
}
}
}
?>

我试着查找不同问题的答案,但我的问题无法通过给出的答案来解决。

我在不同的网站上找了找,就是找不到答案。

我是codeigniter的新手,当你让代码工作

时,它被证明是非常方便的

请检查是否已声明数据库类($autoload['librarys']=array('database');)在config文件夹中的自动加载文件中,还可以使用var_dump()检查输出

已编辑

查询被设置为FALSE,而不是给出结果意味着它失败。我认为你的数据库连接根本不起作用。因此,您可以检查并尝试使用DSN进行连接。

参考-如何使用codeigniter连接到用户DSN?

我认为一个变通方法对您来说很好。与其检查行数,不如检查结果是否为null。

尝试在查询中添加->result(),它可以正常工作,比如:

$dataFromBase = $this->db->get_where($this::DB_TABLE, MyWhereArguments)->result(); // or any query you want.

通过这种方式,我已经有了结果格式,对象格式,然后我检查它是否为空,比如:

if ($dataFromBase != null) {
    // handle your result
}

但是,有点奇怪的是,你的num_rows()不起作用,我做了一些测试,它对我来说很好。

而不是此

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

写这个

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

检查是否工作