codeigniter中的字段未设置错误

时间:2014-11-10 12:55:17

标签: php codeigniter validation

我在验证表单

时得到字段未设置错误

这是我的观点

<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]' 
                )
             );

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

3 个答案:

答案 0 :(得分:0)

$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();
}  

答案 1 :(得分:0)

我试着查看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 :(得分:0)

您可以使用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.