所以我得到了这个错误致命错误:在第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)
检查是否工作