2011-12-08 129 views
3

我在我的網站標題上有一個表單,我允許用戶使用他的用戶名/密碼登錄...然後我POST到/登錄頁面並檢查用戶名是否存在以允許用戶登錄..如果在登錄時I輸出這些錯誤的問題...Codeigniter表單驗證錯誤信息

我試着用下面的代碼顯示自定義錯誤,但沒有運氣

if ($this->form_validation->run() == false){ 
     $this->load->view("login/index", $data); 
    }else{ 
     $return = $this->_submitLogin(); 
     if ($return == true){ 
      //success 
     }else{ 
      $this->form_validation->set_message('new_error', 'error goes here'); 
      //error 
     } 
     $this->load->view("login/index", $data); 
    } 

怎麼做set_message工作,如果這是錯誤的方法,哪一個允許我在這種情況下顯示自定義錯誤?

編輯:

驗證規則:

private $validation_rules = array(
    array(
     'field' => 'username', 
     'label' => 'Username', 
     'rules' => 'trim|required|callback__check_valid_username|min_length[6]|max_length[20]|xss_clean' 
    ), 
    array(
     'field' => 'password', 
     'label' => 'Password', 
     'rules' => 'trim|required|min_length[6]|max_length[32]' 
    ), 
); 
+0

您如何設置您的驗證規則?這些附加信息將是必要的。 'set_message'方法允許您即時設置自己的錯誤消息。但有一點你應該注意到,鍵名必須與它對應的函數名稱相匹配。 – toopay

+0

我試圖做的是當用戶輸入不正確的登錄信息時顯示額外的錯誤信息。 – fxuser

+0

您需要提供的其他信息是:(我再重複一次)如何設置驗證規則?你使用自定義回調函數嗎?需要?獨特? – toopay

回答

6

set_message方法允許您設置y我們自己的錯誤消息。但有一點你應該注意到,鍵名必須與它所對應的函數名相匹配。

如果您需要修改自定義規則,這是_check_valid_username,你可以這樣做,通過這個函數中執行set_message

function _check_valid_username($str) 
{ 
    // Your validation code 
    // ... 
    // Put this in condition where you want to return FALSE 
    $this->form_validation->set_message('_check_valid_username', 'Error Message'); 
    // 
} 

如果要更改默認的錯誤消息的特定規則,你可以通過調用set_message並將第一個參數作爲規則名稱,第二個參數作爲自定義錯誤來實現。例如,如果你想改變required錯誤:萬一你需要改變的語言,而不是錯誤語句本身的

$this->form_validation->set_message('required', 'Oops this %s is required'); 

,創建自己的form_validation_lang.php,放入適當的語言文件夾系統內部語言目錄。

+0

我不知道如果我沒有正確解釋,我有一個表單,我張貼到/登錄頁面,我想顯示錯誤消息時,$ return == false ...多數民衆贊成在... ... – fxuser

0

正如你可以看到here,可以顯示通過以下方式視圖中的自定義錯誤:

<?php echo form_error('new_error'); ?> 

PS :如果這不是您的問題,請發佈您的相應視圖代碼以及您收到的任何其他錯誤消息。

+0

Err這是顯示單個消息,而不是設置自定義消息。 – Bankzilla

+0

'<?php echo form_error('field_name'); ?>其中'field_name'是必須顯示錯誤的字段的名稱。 – Praveen

0

問題是您的表單已經在IF部分驗證過了!

if ($this->form_validation->run() == false){ 
    $this->load->view("login/index", $data); 
}else{ 
    $return = $this->_submitLogin(); 
    if ($return == true){ 
     //success 
    }else{ 
     $data['error'] = 'Your error message here'; 
     //error 
    } 
    $this->load->view("login/index", $data); 
} 

在視圖:

echo $error; 

的CI的方式來檢查用戶憑據是使用回調:

$this->form_validation->set_rules('username', 'Username', 'callback_username_check'); 

... 

public function username_check($str) { 
    // your code here 
} 

,我建議你可以通過這種方式解決問題讀取CI文檔:http://codeigniter.com/user_guide/libraries/form_validation.html

-1

我這樣做的方式是添加另一個驗證規則並再次運行驗證。這樣,我可以保持視圖中的驗證錯誤顯示一致。

以下代碼是從我的工作代碼編輯的摘錄。

public function login() { 
    $this->form_validation->set_rules('email', 'Email', 'required'); 
    $this->form_validation->set_rules('password', 'Password', 'required'); 

    $data['content'] = 'login'; 

    if($this->form_validation->run()) { 
     $sql = "select * from users where email = ? and password = ?"; 
     $query = $this->db->query($sql, array($this->input->post('email'), $this->input->post('password'))); 
     if($query->num_rows()==0) { 
      // user not found 
      $this->form_validation->set_rules('account', 'Account', 'callback__noaccount'); 
      $this->form_validation->run(); 
      $this->load->view('template', $data); 
     } else { 
      $this->session->set_userdata('userid', $query->id); 
      redirect('/home'); 
     } 
    } else { 
     $this->load->view('template', $data); 
    } 
} 

public function _noaccount() { 
    $this->form_validation->set_message('_noaccount', 'Account must exist'); 
    return FALSE; 
} 
0

要求笨3.0

使用callback_方法;

class My_controller extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 
     $this->form_validation->set_message('date_control', '%s Date Special Error'); 
    } 

    public function date_control($val, $field) { // for special validate 
     if (preg_match("/^[0-9]{2}.[0-9]{2}.[0-9]{4}$/", $val)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public function my_controller_test() { 
     if ($this->input->post()) { 
      $this->form_validation->set_rules('date_field', 'Date Field', 'trim|callback_date_control[date_field]|xss_clean'); 
      if ($this->form_validation->run() == FALSE) { 
       $data['errors']=validation_errors(); 
       $this->load->view('my_view',$data); 
      } 
     } 
    } 
} 

結果:

如果日期= '14 .07.2017' 沒有錯誤

如果日期= '14 -7-2017' 日期字段日期特殊的錯誤