[英]Codeigniter form validation error message
我在我的網站標題上有一個表單,我允許用戶使用他的用戶名/密碼登錄...然后我發布到/登錄頁面並檢查用戶名是否存在以允許用戶登錄..如果有登錄時出現問題我輸出這些錯誤......
我嘗試使用以下代碼來顯示自定義錯誤,但沒有運氣
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]'
),
);
set_message
方法允許您動態設置自己的錯誤消息。 但有一點需要注意的是,鍵名必須與它對應的函數名匹配。
如果您需要修改自定義規則,即_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
並將其放入系統語言目錄中的正確語言文件夾中。
正如你可以看到這里 ,你可以顯示在下面的方式您的視圖中的自定義錯誤:
<?php echo form_error('new_error'); ?>
PS:如果這不是您的問題,請發布相應的視圖代碼和您收到的任何其他錯誤消息。
我這樣做的方法是添加另一個驗證規則並再次運行驗證。 這樣,我可以保持視圖中的驗證錯誤顯示一致。
以下代碼是我工作代碼的編輯摘錄。
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;
}
需要Codeigniter 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);
}
}
}
}
結果:
如果date = '14 .07.2017' 沒有錯誤
if date = '14 -7-2017' 日期字段日期特殊錯誤
問題是您的表單已在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.