我希望能够从数据库中选择匹配的数据,然后决定要执行的代码,特别是,我不希望用户能够使用相同的用户名进行两次注册。
我已经尝试了您通常会尝试的方法,将信息发布到控制器中并将其传递给模型以进行计数。然后,我尝试了许多人使用的num_rows();
。
controller.php
$userchecker = $_POST['register-username'];
$this->load->model('User_exists');
$this->User_exists->usercheck($userchecker);
if ($usercheck > 0) {
echo '<p style="color: orange;">A user with this username already exists!</p>';
exit();
}
else {
//Insert user
model.php
public function usercheck($userchecker) {
$this->db->where('ci_useruid', $userchecker);
$query = $this->db->get('users');
$result = $query->result();
$usercheck = $result->num_rows();
}
我希望发生的事是该模型根据从控制器传递的信息来检查用户是否存在,如果存在,则抛出错误。否则,请照常插入。
我得到的错误是:
在数组上调用成员函数num_rows()
答案 0 :(得分:2)
您正在混淆
$query = $this->db->get('users');
$result = $query->result();
$usercheck = $result->num_rows();
您的$query
变量保存整个结果对象。因此,$query
持有->result()
,->num_rows()
等。
通过用$result
分配$query->result()
,您分配的是从数据库中获取的对象数组,而不是辅助方法(例如num_rows()
,它们仍然存在于{{1}中) })
也就是说,避免重复的用户名的更简单方法是使用$query
方法,如下所示:
form_validation
然后在控制器中运行表单验证,您无需自己处理唯一性
答案 1 :(得分:0)
将模型更改为此。
$this->db->where('ci_useruid', $userchecker);
$query = $this->db->get('users');
$usercheck = $query->num_rows();
您可以有一个更简单的方法,@ Javier Larroulet已经提到过。使用表单验证is_unique
。
只需加载这些帮助程序和库:
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
然后您就可以出发了。
答案 2 :(得分:0)
首先,检查具有特定用户名的数据库中有多少行
模型
public function usercheck($userchecker) {
return $this->db->get_where('ci_useruid', ['ci_useruid' => $userchecker])->num_rows();
}
控制器
根据函数usercheck
的结果执行所需的操作
$userchecker = $_POST['register-username'];
$this->load->model('User_exists');
$rows = $this->User_exists->usercheck($userchecker);
if ($rows > 0) {
echo '<p style="color: orange;">A user with this username already exists!</p>';
exit();
}else {
//Coding...
}