Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter 3回调中无法返回错误消息_Php_Codeigniter - Fatal编程技术网

Php CodeIgniter 3回调中无法返回错误消息

Php CodeIgniter 3回调中无法返回错误消息,php,codeigniter,Php,Codeigniter,我的代码有问题。我正在为我的小项目创建一个使用CI3的简单登录。我的问题是在回调验证中有一条错误消息 这是我在尝试验证表单时收到的错误 Unable to access an error message corresponding to your field name Password.(check_database) 以下是控制器中的mo代码: public function index() { $this->form_validation->set_rules

我的代码有问题。我正在为我的小项目创建一个使用CI3的简单登录。我的问题是在回调验证中有一条错误消息

这是我在尝试验证表单时收到的错误

Unable to access an error message corresponding to your field name Password.(check_database)
以下是控制器中的mo代码:

public function index() {

        $this->form_validation->set_rules('username', 'Username', 'trim|required');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database');

        $this->form_validation->set_error_delimiters('<div class="error text-red">', '</div>');

        if($this->form_validation->run() == FALSE) {

            $data = array();
            $data['modules'] = $this->flx_lib->moduler($data);
            $this->load->view('login', $data);

        } else {


            //ok
        }

    }

    public function check_database($password) {

        $username = $this->input->post($username);
        $result = $this->flx_users->validate_user($username, $password);

        if($result) {
            //ok
            return TRUE;
        } else {
            $this->form_validation->set_message('check_database', 'Invalid username or password');
            return FALSE;
        }

    }
公共功能索引(){
$this->form_validation->set_规则('username'、'username'、'trim | required');
$this->form_validation->set_rules('password','password','trim | required | callback_check_database');
$this->form_validation->set_error_分隔符(“”,);
如果($this->form\u validation->run()==FALSE){
$data=array();
$data['modules']=$this->flx_lib->moduler($data);
$this->load->view('login',$data);
}否则{
//嗯
}
}
公共功能检查_数据库($password){
$username=$this->input->post($username);
$result=$this->flx\u users->validate\u user($username,$password);
如果($结果){
//嗯
返回TRUE;
}否则{
$this->form_validation->set_消息('check_database','Invalid username或password');
返回FALSE;
}
}
以下是我的看法:

<div class="form-group has-feedback <?php error_exists('username'); ?>">
                <input type="text" class="form-control" name="username" placeholder="Username" />
                <span class="fa fa-user form-control-feedback "></span>
                <?php echo form_error('username'); ?>
            </div>

            <div class="form-group has-feedback <?php error_exists('password'); ?>">
                <input type="password" class="form-control" name="password" placeholder="Password">
                <span class="glyphicon glyphicon-lock form-control-feedback"></span>
                <?php echo form_error('password'); ?>
            </div>

好的,我在代码中找到了错误。实际上,这是HMVC表单验证的一个问题

以下是正确答案的链接:


还是一样的结果(检查更新的代码,我第一次将设置规则与设置消息混合。
public function index() {

    $this->form_validation->set_rules('username', 'Username', 'trim|required');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database', 
        array('check_database' => 'Invalid username or password.')
    );

    $this->form_validation->set_error_delimiters('<div class="error text-red">', '</div>');

    if($this->form_validation->run() == FALSE) {

        $data = array();
        $data['modules'] = $this->flx_lib->moduler($data);
        $this->load->view('login', $data);

    } else {


        //ok
    }

}

public function check_database($password) {

    $username = $this->input->post($username);
    $result = $this->flx_users->validate_user($username, $password);

    if($result) {
        //ok
        return TRUE;
    } else {
        return FALSE;
    }

}
$this->form_validation->set_rules('field_name', 'Field Label', 'rule1|rule2|rule3',
    array('rule2' => 'Error Message on rule2 for this field_name')
);
Solution:

1. Create MY_Form_validation.php file in libraries folder and paste following code in it.

 if (!defined('BASEPATH')) exit('No direct script access allowed');
    class MY_Form_validation extends CI_Form_validation
    {

    function run($module = '', $group = '')
    {
       (is_object($module)) AND $this->CI = &$module;
        return parent::run($group);
    }
}

    And change if ($this->form_validation->run() == FALSE) to if ($this->form_validation->run($this) == FALSE) thats all folks..