Codeigniter表单验证错误消息

时间:2011-12-08 10:22:35

标签: php codeigniter

我在我的网站标题上有一个表单,我允许用户使用他的用户名/密码登录...然后我POST到/登录页面并检查用户名是否存在以允许用户登录..如果登录时出现问题我输出了这些错误...

我尝试使用以下代码显示自定义错误,但没有运气

    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]'
    ),
);

5 个答案:

答案 0 :(得分:6)

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并将其放入系统语言目录中的正确语言文件夹中。

答案 1 :(得分:1)

如您所见[{3}},您可以通过以下方式在视图中显示自定义错误:

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

PS:如果这不是您的问题,请发布相应的视图代码以及您收到的任何其他错误消息。

答案 2 :(得分: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

答案 3 :(得分:0)

我这样做的方法是添加另一个验证规则并再次运行验证。这样,我可以保持视图中的验证错误显示一致。

以下代码是我工作代码的编辑摘录。

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;
}

答案 4 :(得分:0)

需要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'没有错误

如果日期= '14 -7-2017'日期字段日期特殊错误