Codeigniter 3表单验证未按预期工作

时间:2019-04-11 08:52:14

标签: php codeigniter

CI3文档明确指出:“由于尚未告知Form Validation类进行任何验证,因此默认情况下它返回FALSE(布尔值false)。The run()方法仅在成功应用规则后才返回TRUE。没有任何失败。”。

我有以下方法片段。显然,在第一个视图上,该视图将始终吐出“警告-糟糕,出现了问题”,但没有validates_errors()。我该如何解决?可以检查一下表单是否为$ _POST吗?关于完成的最佳方法或建议是什么? bootstrap_alert()只是将错误或成功消息包装到引导警报中。

    if ($this->form_validation->run() == FALSE) {
        $message = array(   'message'   => 'Warning - Ooops something went wrong '.validation_errors(),
                            'class'     => 'danger',  // must be warning, danger, success or info.
                    );
        $this->data['alert'] = bootstrap_alert($message);
        $this->load->view($this->mh_template, $this->data);
    }   else {
        $my_time_zone   = $this->input->post('timezones');
        $user_id        = $this->ion_auth->user()->row()->id;
        $setting_insert_or_update = 'user_time_zone';
        $this->MH_user_settings_model->mh_insert_or_update_setting($setting_insert_or_update, $my_time_zone, $user_id);
        $message = array(   'message'   => 'Success - Timezone updated',
                            'class'     => 'success',  // must be warning, danger, success or info.
                        );
        $this->data['alert'] = bootstrap_alert($message);
        $this->load->view($this->mh_template, $this->data); 
    }

这是我最终要做的:

//设置表单规则         $ this-> form_validation-> set_rules('timezones','timezones','required');

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

        $this->load->view($this->mh_template, $this->data);


    }   else {

        $my_time_zone   = $this->input->post('timezones');
        $user_id        = $this->ion_auth->user()->row()->id;
        $setting_insert_or_update = 'user_time_zone';
        $this->MH_user_settings_model->mh_insert_or_update_setting($setting_insert_or_update, $my_time_zone, $user_id);
        $message = array(   'message'   => 'Success - Timezone updated',
                            'class'     => 'success',  // must be warning, danger, success or info.
                        );
        $this->data['alert'] = bootstrap_alert($message);
        $this->session->set_flashdata('message', $this->data['alert'] );              
        redirect('/MH_app_private/mh_app_settings');
    }

2 个答案:

答案 0 :(得分:1)

检查请求是否为POST以显示或不显示警告。

答案 1 :(得分:0)

我没有意识到我可以使用以下格式设置validation_errors():

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

这终于解决了问题。