codeigniter,表格验证错误的第一次访问

问题描述 投票:0回答:1

在Codeigniter中,以下代码通常用于具有表单的页面。但是,当用户第一次登陆页面并且表单验证失败时,将通过相同的路径进行路由。

如此示例所示,将触发闪存数据。即使用户只是登陆页面而尚未提交任何表格。

我试图将一个新的类名回显到某个输入字段,以便在验证失败时突出显示它们。但目前它也突出了首次加载时的领域。

我知道我可以回显validation_error或form_error。有没有办法回显一个没有绑定到字段名称的通用消息,只有在提交失败后才会这样

// rules and other stuff above
if ($this->form_validation->run() == FALSE){
        $this->session->set_flashdata('errorClass',"is-invalid");
        $this->load->view('defaultOrFalse');
}else{
        $this->load->view('success');
}


//view file
<input class=" <?php $this->session->flashdata('errorClass') ; ?>">

基本上我正在尝试使用bootstrap 4的输入验证来显示https://getbootstrap.com/docs/4.0/components/forms/#server-side

forms codeigniter validation bootstrap-4
1个回答
1
投票

我不知道您的确切设置,但您可以执行以下逻辑:

<?php

class Some_controller extends CI_Controller {

    // controller/search/{$term}
    public function some_method($term = null) {

        // where some_field is some field in your form
        // that gets posted on submit
        if ($this->input->post('some_field')) {
            // or if (isset($_POST)) {
            if ($this->form_validation->run() == FALSE) {
                $this->session->set_flashdata('errorClass', "is-invalid");
                $this->load->view('defaultOrFalse');
            } else {
                $this->load->view('success');
            }
        } else {
            // default view
        }
    }

}
?>

对于你的第二个问题:

<h5>Username</h5>
<?php echo form_error('username'); ?>
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" <?php if (!empty(form_error('username'))) { echo "class='error'"; } ?> />

也可以做一个帮助,并使用而不是form_error检查你的类是否有字段错误(尚未验证这是否有效,但它应该)。

/**
 * Checks if form validation field by name
 * has error
 * 
 * @param string $field Name of field
 * @return boolean
 */
function field_has_error($field) {
    $CI = &get_instance();
    $CI->load->library('form_validation');
    $arr = $CI->form_validation->error_array();
    if (isset($arr[$field])) {
        return true;
    }
    return false;
}

用法:

<?php if (field_has_error('username')) { echo "class='error'"; } ?> />

© www.soinside.com 2019 - 2024. All rights reserved.