2013-07-26 67 views
0

因此,我試圖在CodeIgniter(v2.1.4)中使用Form_validation庫的回調函數來檢查在創建數據庫之前,是否存在具有給定用戶名或電子郵件的用戶一位新用戶。使用CodeIgniter表單驗證回調函數的HTTP 500錯誤

login.php中(控制器)

function create_member() 
{ 
    $this->load->library('form_validation'); 
    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]|callback_value_check[USERNAME]'); 

    if($this->form_validation->run() != FALSE) 
    { 
     // Validation passed; create the new user. 
     $this->load->model("members_model"); 
     if($query = $this->members_model->create_member()) 
     { 
      // Load the success page view. 
     } 
     else 
     { 
      // Reload the signup page view. 
     } 
    } 
    else 
    { 
     // Reload the signup page view. 
    } 
} 

function _value_check($value, $column) 
{ 
    $this->load->model("members_model"); 
    if($this->members_model->check_exist_value($column, $value)) 
    { 
     $this->form_validation->set_message('value_check', '%s is already taken.'); 
     return FALSE; 
    } 
    else 
    { 
     return TRUE; 
    } 
} 

members_model.php(型號)

function check_exist_value($column, $value) 
{ 
    $this->db->where($column, $value); 
    $result = $this->db->get('MEMBERS'); 

    if($result->num_rows() > 0) 
    { 
     // A user with that unique value already exists in the database. 
     return TRUE; 
    } 
    else 
    { 
     // There is no user with that unique value in the database. 
     return FALSE; 
    } 
} 

如在代碼上方觀察,我只目前正在測試爲現有的用戶名。標準驗證消息正確顯示(即必需的,min_length等)。但是,如果我輸入一個我知道已經存在於數據庫中的值(這意味着自定義回調驗證函數應該失敗),我反而會得到HTTP 500錯誤(Chrome的默認「服務器錯誤」頁面)。

有沒有人有任何見解,爲什麼我得到一個HTTP 500錯誤,而不是看到我的自定義錯誤消息?

回答

0

我不知道爲什麼當codeigniter已經在form_validation類中提供了這個功能時,爲了電子郵件/用戶名的唯一性檢查使用了回調函數,只需將驗證規則中的唯一規則檢查與表名和列在電子郵件/用戶名也提供該表是

$this->form_validation->set_rules('username', 'Username', 
'trim|required|min_length[4]|unique[tablename.column_email_username,tablename.id]'); 

$this->form_validation->set_rules('username', 'Username', 
'trim|required|min_length[4]|is_unique[tablename.column_email_username]'); 

希望獨特的[tablename.column_email_username,tablename.id]做這項工作,你不會面對服務器錯誤

或嘗試本作is_unique

+0

嘗試了您列出的所有解決方案,但不幸的是,似乎沒有任何工作;所有仍然最終與http 500錯誤。 – Capitrium

0

Ahaha,原來在驗證失敗時重新加載視圖的部分中有一個類型。只需要休息一下,重新閱讀我所發現的內容!