【问题标题】:codeigniter, form validation false verse first time visitcodeigniter,表单验证假诗第一次访问
【发布时间】:2018-03-06 00:23:22
【问题描述】:

在 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

【问题讨论】:

  • 好吧,找到了这个人的帖子,我猜他的解决方案有效stackoverflow.com/questions/6297004/…
  • 我不认为这就是你想要的,因为如果你从不验证就不会发生验证错误

标签: forms codeigniter validation bootstrap-4


【解决方案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;
}

用法:

&lt;?php if (field_has_error('username')) { echo "class='error'"; } ?&gt; /&gt;

【讨论】:

    猜你喜欢
    • 2014-08-22
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2014-11-23
    • 1970-01-01
    相关资源
    最近更新 更多