簡體   English   中英

如何檢查用戶名是否已經在codeigniter中

[英]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

行號: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任何人都可以幫助我。 提前致謝。

您的問題出在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

試試看,讓我知道。

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM