遇到PHP错误严重性:警告
消息:count():参数必须是数组或实现Countable的对象
文件名:文件名:
行号:17
回溯:
文件:C:\xampp\htdocs\labexercise007\application\models\login_model.php行:17功能:错误处理程序
文件:C:\xampp\htdocs\labexercise007\应用程序\控制器\登录. php行:31功能:登录
文件:C:\xampp\htdocs\labexercise007\应用程序\控制器\登录. php行:14功能:运行
<?php
class login_model extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->load->database();
}
public function login($username, $password)
{
$condition_array = array(
'user_name' => $username,
'user_pass' => md5($password)
);
$rs = $this->db->get_where('users', $condition_array);
$row_count = count($rs->row_array());
if ($row_count > 0) {
return $rs->row_array();
} else {
return FALSE;
}
}
}
<?php
class Login extends CI_Controller
{
public function index()
{
$data['title'] = 'Login';
$this->load->view('login', $data);
}
public function verify()
{
$this->form_validation->set_rules('txtuser', 'Username', 'required');
$this->form_validation->set_rules('txtpass', 'Password', 'required|callback_check_user');
if ($this->form_validation->run() === TRUE) {
if ($this->session->user_lvl == 1) {
redirect('admin/home');
} else {
redirect('home');
}
} else {
$this->index();
}
}
public function check_user()
{
$username = $this->input->post('txtuser');
$password = $this->input->post('txtpass');
$this->load->model('login_model');
$login = $this->login_model->login($username, $password);
if ($login) {
$sess_data = array(
'account_name' => $login['user_accountname'],
'user_lvl' => $login['user_lvl'],
'islogged' => TRUE
);
$this->session->set_userdata($sess_data);
return true;
} else {
$this->form_validation->set_message('check_user', 'Invalid Username/password');
return false;
}
}
}
5条答案
按热度按时间nwlqm0z11#
PHP v7.2.0 count()现在会对传递给array_or_countable参数的无效可计数类型发出警告。see more
z18hc3ub2#
如果结果集为空,则
row_array()
值为NULL
,并且不能对其使用count
。请在计数前检查row_array()
返回的值。稍后编辑
尝试移除此区块:
并将其替换为三元运算符调用:
这应该会解决您的警告并传回适当的结果。
wrrgggsh3#
您是否尝试获取结果数组?在查询生成器的文档中,它是这样给出的。
如果是,则返回一个值。
在这种情况下,即使在查询中没有结果,它也总是返回一个数组。
of1yzvn44#
与其计算在您的情况下可能为空的行数组,因此您没有可计数的对象或数组,不如计算查询结果。
请改用查询生成器中内置的count records函数。
更改了函数以删除else语句,因为在本例中不需要该语句。
另外,我可能会补充说,你不应该使用MD5来加密你的密码。MD5在这一点上并不真正安全。
有关codeigniter 3上数据库结果计数的更多信息:https://codeigniter.com/userguide3/database/query_builder.html?highlight=count#limiting-or-counting-results
b1payxdu5#
在模型中: