2012-04-26 95 views
0

我有下面的代碼:錯誤信息不會顯示

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Login extends MY_Controller 
{ 

function __construct() 
{ 
    parent::__construct(); 
    $this->load->model('users/user_model'); 
    $this->load->library('form_validation'); 
} 

function _load_login_page() 
{ 
    $this->load->model('sysconfig/sysconfig_model'); 

    $a = $this->sysconfig_model->get_sysconfig(); 
    $row = $a[0]; 

    $this->lang->load('klas',$row->sysconfig_language); 

    $data['sys_name'] = $row->sysconfig_system_name;   
    $data['template_name'] = $row->systemplate_name; 
    $data['css_script'] = base_url().'assets/'.$row->systemplate_name; 

    if($row->sysconfig_maintenance === 'Y') 
    { 
     $this->load->view('sysconfig/maintenance',$data); 
    } 
    else { 

     $this->load->view('login',$data); 
    } 
} 

function index() 
{    
    $this->form_validation->set_rules('username', 'Username', 'trim|required|max_length[12]|xss_clean|callback_check_auth'); 
    $this->form_validation->set_rules('password','Password','trim|required'); 

    if($this->form_validation->run($this) == FALSE) 
    { 
     $this->_load_login_page();  
    } else { 
     redirect('welcome','refresh'); 
    } 

} 

function check_auth() 
{ 
    if($this->user_model->authentication()) 
    { 
     return TRUE; 
    } 

    $this->form_validation->set_message('check_auth',$this->lang->line('invalid_username')); 
    return FALSE; 
} 
?> 

user_model.php

<?php 

class User_Model extends CI_Model 
{ 
function authentication() 
{ 
    $this->db->where('useracc_id', $this->input->post('username')); 
    $this->db->where('useracc_password', md5($this->input->post('password'))); 
    $q = $this->db->get('base_useracc'); 

    if($q->num_rows() == 1) 
    { 
     $session_data = array('isUserLogged'=>TRUE); 

     $this->session->set_userdata($session_data); 

     return TRUE; 
    } 
} 
?> 

從這裏我們可以看到,如果用戶不填寫用戶名和密碼字段,它會顯示錯誤,並且一切按預期工作。問題是,如果用戶提供了無效的用戶名或密碼,則不會顯示錯誤消息。

的信息,我已經把$lang['invalid_username'] = 'Invalid username or password';上的語言文件。

我正在使用HMVC技術。請幫幫我。

回答

0

您似乎沒有將任何數據傳遞給您的回調函數。回調函數期望輸入字段的值作爲參數傳遞。我不認爲你可以將此工作作爲表單驗證回調,因爲驗證方法可能需要知道密碼和用戶名。目前,您不會將任何數據傳遞到您的check_auth方法或實際上向您的user_model-> authentication()方法傳遞。這就是爲什麼form_validation忽略它。

與其將check_auth作爲回調調用,爲什麼不先調用form_validation(這實際上就是 - 檢查數據是否正確和消毒),然後將值從表單傳遞到check_auth函數,作爲如果聲明。你將無法使用form_validation set_message方法來顯示錯誤,但我認爲這是一種更簡潔的方法。

總之,使用form_validation檢查您收到的數據是否正常,如果不是,則顯示相關消息。基於這些信息驗證用戶是一個獨立的過程,我認爲這不屬於驗證過程。你看得到差別嗎?

+0

我嘗試使用相同的代碼實現另一個登錄功能,但一個是非hmvc,它的工作原理。 – softboxkid 2012-04-27 00:24:59

0

從HMVC wiki頁面:

當使用MX表單驗證,您將需要擴展CI_Form_validation類,如下圖所示,分配電流控制器爲$ CI變量的form_validation庫之前。這將允許您的回調方法正常工作。 (這也在CI論壇上討論過)。即:

<?php 
/** application/libraries/MY_Form_validation **/ 
class MY_Form_validation extends CI_Form_validation 
{ 
    public $CI; 
} 

<?php 
class Xyz extends MX_Controller 
{ 
    function __construct() 
    { 
     parent::__construct(); 

     $this->load->library('form_validation'); 
     $this->form_validation->CI =& $this; 
    } 
}