[英]how to check if username already exists in codeigniter
我在codeigniter中的一個網站上工作。我不是使用框架的專家。在這里,我必須檢查數據庫中是否已經存在電子郵件。我已經編碼了所需的功能,但是提交表單時遇到錯誤。 在控制器中,我制定了以下規則。
我的代碼是:
$this->form_validation->set_rules(
'email', 'Email', 'trim|required|valid_email|is_unique|callback_isEmailExist'
);
public function isEmailExist($email) {
$this->load->library('form_validation');
$this->load->model('user');
$is_exist = $this->user->isEmailExist($email);
if ($is_exist) {
$this->form_validation->set_message(
'isEmailExist', 'Email address is already exist.'
);
return false;
} else {
return true;
}
}
在模型用戶中,功能為:
function isEmailExist($email) {
$this->db->select('id');
$this->db->where('email', $email);
$query = $this->db->get('users');
if ($query->num_rows() > 0) {
return true;
} else {
return false;
}
}
提交表單時,出現以下錯誤。
遇到PHP錯誤
嚴重程度:注意
消息:未定義的偏移量:1
文件名:libraries / Form_validation.php
發生數據庫錯誤
錯誤號:1064
您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊,以在第2行的'WHERE`='muraddnw@gmail.com'LIMIT 1'附近使用正確的語法
SELECT * WHERE`='muraddnw@gmail.com'LIMIT 1
文件名:C:\\ xampp \\ htdocs \\ aunction \\ system \\ database \\ DB_driver.php
行號:330任何人都可以幫助我。 提前致謝。
您的問題出在set_rules行中。 在這里,您同時使用is_unique
和callback
函數。 您必須使用其中的任何一個。 如果您使用call_back函數檢查重復數據; 不需要使用is_unique。 For this wrong you get that error
只需從那里刪除is_unique
。
$this->form_validation->set_rules('email','Email','trim|required|valid_email|callback_isEmailExist'); // removed is_unique
試試看,讓我知道。
$this->form_validation->set_rules('username', 'userName', 'required|callback_exists_username');
#uniqueness of username
function exists_username($str)
{
$record_id = $this->input->post('record_id');
$condition = array('user_id !='=>$record_id,'username'=>$str);
$value =GetAllRecord('user_master',$condition,$is_single=true);
if (count($value) == 0)
{
return TRUE;
}
else
{
$this->form_validation->set_message('exists_username', 'username already exists!');
return FALSE;
}
}
只需將is_unique[tablename.fieldname]
規則添加到表單驗證即可。 例如:
array('field' => 'email', 'label' => 'Email', 'rules' => 'trim|required|valid_email|is_unique[users.email]'));
你的模特就像
$this->db->select('id');
$this->db->where('email', $email);
請告訴mysql您要從哪個表獲取記錄。
$this->db->from('tablename');
就像
$this->db->select('id');
$this->db->from('tablename');
$this->db->where('email', $email);
您在mysql查詢中出錯:-
SELECT * WHERE ` = 'muraddnw@gmail.com' LIMIT 1
您的代碼未指定要查詢的表。 所以使用以下:
$this->db->select('id');
$this->db->from('tablename');
$this->db->where('email', $email);
希望這可以幫助。
不需要做一個特殊的功能,這就足夠了
$this->form_validation->set_rules(
'email', 'Email', 'trim|required|valid_email|is_unique'
);
使用is_unique[table.field]
添加表名和字段。
$this->form_validation->set_rules(
'email', 'Email', 'trim|required|valid_email|is_unique[table.field]|callback_isEmailExist'
);
您可以使用form_validator函數is_unique[table_name.field_name]
檢查字段是否唯一
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.