如何检查codeigniter中是否已存在用户名

时间:2013-08-28 22:02:17

标签: php 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

行号:953

发生数据库错误

错误号码: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 有人帮我请。 提前谢谢。

8 个答案:

答案 0 :(得分:2)

您的问题出在set_rules行中。在这里,您同时使用is_uniquecallback函数。你必须使用其中的任何一个。如果使用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]

检查字段是否唯一