【问题标题】:The field was not set error in codeigniter该字段未在 codeigniter 中设置错误
【发布时间】:2014-11-10 12:55:16
【问题描述】:

验证表单时出现字段未设置错误

这是我的看法

<div class="panel-body">

    <h3>Basic Information</h3>

<?php $atrrib = array('class' => 'form-horizontal','role' => 'form');?>
<?php echo form_open('school/shule',$atrrib);?>
<div class="col-md-6">
     <div class="form-group">
        <label for="add_name" class="col-md-2 control-label">School:</label> 
        <div class="col-md-7">
            <input type="text" class="form-control" name="add_name" id="addSchoolName" placeholder="School name">
        </div>
    </div>

</div>
<button type="submit" class="btn btn-default">Next</button>
<?php echo form_close();?> 
</div>
</div>
</div>
<div class="col-md-2"><?php include_once (APPPATH. 'views/admin/admin_right_column.php');?></div>
</div>

这是我的控制器

class School 扩展 CI_Controller {

  public function __construct() {
     parent::__construct();
 }// End of construct

 public function shule(){
     $this->load->library('form_validation');

        if($this->form_validation->run('first_form') === TRUE){

            echo 'Valid';
        }

        else{
         if(validation_errors()){

           echo validation_errors();

         }  

     $data['title'] = "Add School";
     $data['page'] = "admin| add school";


     $this->load->view('admin/admin_header',$data);
     $this->load->view('admin/add_school',$data);
     $this->load->view('admin/admin_footer');  
     }

 }

}

这是我的 form_validation 配置

               $config['first_form'] = array(
                array(
                  'field' => 'add_name',
                  'label' => 'School name',
                  'rules' => 'required|xss_clean|min_length[2]' 
                )
             );

当我将字段留空时,我收到一个字段未设置错误,并且当我输入单个字符时,我收到一个无法访问与您的字段名称错误相对应的错误消息。

【问题讨论】:

    标签: php codeigniter validation


    【解决方案1】:

    我试着看看 CI 是在哪里引发了你的错误

    无法访问与您的字段名称对应的错误消息

    然后我发现了这个

            if ($result === FALSE)
            {
                if ( ! isset($this->_error_messages[$rule]))
                {
                    if (FALSE === ($line = $this->CI->lang->line($rule)))
                    {
                        $line = 'Unable to access an error message corresponding to your field name.';
                    }
                }
                else
                {
                    $line = $this->_error_messages[$rule];
                } 
    

    所以这意味着 CI 会检查您是否没有为该字段设置规则消息,然后检查 form_validation_lang.php 文件中是否有对应于触发函数/规则的行。 所以我假设 CI 没有找到与您的字段名称对应的错误消息,因为

    • 您已编辑/删除带有回调/规则名称的行
    • 您在 /application/language 下创建了另一个与默认 form_validation_lang 同名的语言文件,并且尚未定义与您的字段名称对应的规则。

    解决方案是交叉检查您的 lang 文件,如果它定义了与您的规则同名的行,或者删除任何与 form_validation_lang.php 同名的自定义语言文件,或者您可以添加一个规则,例如

    $lang['required'] = 'Name field is required";
    

    或您在自定义语言文件中的验证文件/函数中定义的任何其他规则。

    【讨论】:

    • 嗨,罗比。谢谢您的回答。好吧,尽管我已经定义了一个自定义错误语言文件,但我还有其他可以正常工作的表单。我已经删除了它,这种其他形式现在可以使用。可以解释吗?
    • 是的,你可以......你可以有一个自定义的规则,它定义了与原始规则同名的所有规则......很高兴它成功了......
    【解决方案2】:

    试试

    $this->form_validation->set_rules('add_name', 'School name', 'trim|required||min_length[2]');
    if ($this->form_validation->run() == TRUE){
      echo 'Valid';
    }
    else {
      $data['title'] = "Add School";
      $data['page'] = "admin| add school";
      $this->load->view('admin/admin_header',$data);
      $this->load->view('admin/add_school',$data);
      $this->load->view('admin/admin_footer');
    }
    

    并检查视图中的错误

    if(validation_errors()){
      echo validation_errors();
    }  
    

    【讨论】:

    • 好的。让我这样做。我会尽快回复您。
    • 抱歉,花了几个小时。我已经能够找到解决方案。谢谢
    【解决方案3】:

    您可以使用 set_message 设置自定义错误消息,并使用 set_rules 函数中的标签。您可以在此处找到文档。

    这是一个例子:

    // Set the validation rule
    $this->form_validation->set_rules('project_name', 'Project Name', 'trim|required');
    
    // Set the custom message with %s where the label should go
    $this->form_validation->set_message('required', '%s is required. Please enter a value.');
    
    // For an invalid project_name, you will get the error:
    // Project Name is required. Please enter a value.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 2017-11-22
      • 2013-02-08
      相关资源
      最近更新 更多