2012-12-22 21 views
-1

我試圖輸入一個自定義的表單錯誤,它會將ab錯誤返回給用戶說:「您沒有account.click這裏註冊。但是目前如果我輸入不正確的用戶名在我的配置文件數據庫中不存在。我有一個lang文件,加載我已經在我的autoload.php文件中定義的錯誤:$ autoload ['language'] = array('myerrors');是我的觀點的問題?我想我需要使用一個form_error線,但我不是確切位置...定義的錯誤的名稱是validateUser_error爲什麼我的表單錯誤不能從表單驗證中拋出正確的消息?

型號:

function validateUser($username, $password) 
    { 
     $this->db->select('*')->from('membership'); 
     $this->db->where('username', $username); 
     $this->db->where('password', $password); 
     $query = $this->db->get(); 
     if ($query ->num_rows ==1) 
    { 
     $this->form_validation->set_message('validateUser_error'); 

     return true; 
    } 

    else{ 
     return false; 

     } 
    } 

查看:

<?php echo validation_errors(); ?> 

<?=form_open('login/loguserin');?> 
    <p> 
    username <?=form_input('username');?> 
    </p> 
    <p> 
    password <?=form_password('password');?> 
    </p> 
    <p> 
    <?=form_submit('submit', 'Login'); ?> 
    <?=form_close(); ?> 
</p> 

控制器:

功能loguserin()

{

$this->load->helper(array('form', 'url')); 

$this->load->library('form_validation'); 

$this->form_validation->set_rules('username', 'Username', 'required|min_length[4]|max_length[12]|callback_validateUser_error|trim'); 
$this->form_validation->set_rules('password', 'Password', 'required|md5|trim'); 


$username = $this->input->post('username'); 
$password = $this->input->post('password'); 

$valid = $this->membership->validateUser($username, $password); 

if ($this->form_validation->run() && $valid == true) 
{ 
    $this->session->set_userdata('status', 'OK'); 
    $this->session->set_userdata('username', $username); 

    redirect('home'); 
} 
else 
{ 
    $this->session->set_userdata('status', 'NOT_OK'); 
    $this->load->view('shared/header'); 
    $this->load->view('account/logintitle'); 
    $this->load->view('account/loginview'); 
    $this->load->view('shared/footer'); 
} 
} 

回答

0

它是有點奇怪在模型中設置該信息 - 通常地方這樣做是控制器...

另外,如果你自動加載form_validation,那麼爲什麼你再次加載它在控制器?如果你不這樣做,你還應該在模型中加載它,如果你想在那裏設置消息的話。

但最重要的是驗證消息只會在功能validateUser_error返回false時出現 - 此函數似乎不存在於您的示例中。

有不同的方法來改變代碼,但基本上你的validateUser()應該由validateUser_error()調用(它將被CI自動調用,因爲它在驗證規則中)可以從表單域獲取數據,也無條件致電

$this->form_validation->set_message('validateUser_error', 'Error message'); 

我希望它有幫助。

0

更改模型方法,使其僅返回true或false。 如果失敗,請在視圖中顯示消息。

if($this->membership->validateUser($username, $password) == false) 
{ 
     $data['error_msg'] = 'OMG what is up with your fat fingers? '; 
     // load view, pass $data, $error_msg will be available in yr view 
     $this->load->view('account/loginview', $data); 
} 
else 
{ 
     // keep going 

} 

此外,如果檢查用戶名,您將有更多的選擇,然後檢查密碼。

另一種方法是如果失敗了,可以使用單獨的方法,並使用$ this-> error_msg或類似方法。特別是如果你加載大量的意見,你不會有重複它

if($this->membership->validateUser($username) == false) 
    { 
    $this->error_msg = 'No user by that name '; 
    $this->loginFail(); 
    } 
    elseif($this->membership->validatePass($password) == false) 
    { 
    $this->error_msg = 'Password does not match this user name'; 
    $this->loginFail(); 
    } 
在loginFail()

那麼你會加載您的意見,以及相應的錯誤信息會被自動傳遞給視圖:

$data['error_msg'] = $this->error_msg ; 
相關問題