我正在使用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 有人帮我请。 提前谢谢。
答案 0 :(得分:2)
您的问题出在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
试试看,告诉我。
答案 1 :(得分:2)
$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;
}
}
答案 2 :(得分:2)
只需将is_unique[tablename.fieldname]
规则添加到表单验证中即可。例如:
array('field' => 'email', 'label' => 'Email', 'rules' => 'trim|required|valid_email|is_unique[users.email]'));
答案 3 :(得分:0)
您的模型就像
$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);
答案 4 :(得分:0)
mysql查询中有错误: -
SELECT * WHERE ` = 'muraddnw@gmail.com' LIMIT 1
您的代码未指定要查询的表。所以使用以下: -
$this->db->select('id');
$this->db->from('tablename');
$this->db->where('email', $email);
希望这有帮助。
答案 5 :(得分:0)
无需制作特殊功能,这就够了
$this->form_validation->set_rules(
'email', 'Email', 'trim|required|valid_email|is_unique'
);
答案 6 :(得分:0)
使用is_unique[table.field]
添加表名和字段。
$this->form_validation->set_rules(
'email', 'Email', 'trim|required|valid_email|is_unique[table.field]|callback_isEmailExist'
);
答案 7 :(得分:0)
您可以使用form_validator函数is_unique[table_name.field_name]