Codeigniter表单验证在成功时失败

时间:2009-11-21 19:43:25

标签: codeigniter validation

我正在构建一个管理实用程序,用于将大量图像添加到我正在处理的应用中。我还需要记录与图像关联的某些属性,然后将它们全部存储到数据库中。

所以基本上脚本会查看文件夹,将文件夹的内容与数据库中的记录进行比较。必须输入所有信息才能完成数据库记录,从而进行表单验证。

验证工作正常,当没有输入值时,它会提示输入缺少的字段。但是,即使字段填充,也会发生这种情况。

我正在做一些有趣的事情,这可能是原因。

因为我正在添加大量图像,所以我在for循环中创建数据,并在同一个for循环中添加验证规则。

结果如下:

http://s75151.gridserver.com/CI_staging/index.php/admin_panel/bulk_emo_update

现在我在测试验证时在表单中有默认测试值。提交按钮位于底部。我正在打印POST变量用于测试目的。

以下是代码:

function bulk_emo_update() {  
    $img_folder_location = 'img/moodtracker/emos/';//set an image path

    $emo_files = $this->mood_model->get_emo_images('*.{png,jpg,jpeg,gif}',                   $img_folder_location); //grab files from folder

    $emo_records = $this->mood_model->get_all_emos(); //grab records from db

    $i=1; //sets a counter to be referenced in the form

    $temp_emo_info = array(); //temp vairable for holding emo data that will be sent to the form

 //loop through all the files in the designated folder
 foreach($emo_files as $file) {
  $file_path = $img_folder_location.$file;//builds the path out of the flder location and the file name 
  //loops through all the database reocrds for the pupose of checking to see if the image file is preasent in the record
  foreach($emo_records as $record) {
   //compairs file paths, if they are the 
   if($record->picture_url != $file_path) {

    //FORM VALIDATION STUFF:
    $rules['segment_radio['.$i.']'] = "required";
    $rules['emo_name_text_feild['.$i.']'] = "required";

    //populating the temp array which will be used to construct the form
    $temp_emo_info[$i]['path'] = $file_path;
    $temp_emo_info[$i]['name'] = $file; 
   }
  }
  $i++;
 }

 //sets the reference to validation rules
 $this->validation->set_rules($rules);

 //checks to see if the form has all it's required fields

 if ($this->validation->run() == FALSE) { //if validation fails:
  print_r($_POST);
  //prepairs the data array to pass into the view to build the form
  $data['title'] = 'Bulk Emo Update';
  $data['intro_text'] = 'fill out all fields below. hit submit when finished';
  $data['emos_info'] = $temp_emo_info;

  $this->load->view('admin_bulk_emo_update_view',$data);  
 } else { // if it succeeds:
          //printing for test purposes
   print_r($_POST);    
         $this->load->view('form_result');
 } 
}

我是codeigniter和php的新手,所以如果有什么看起来很奇怪请告诉我,不要担心我的感觉我的皮肤很厚。

2 个答案:

答案 0 :(得分:0)

if ($this->validation->run() == FALSE)

如果每次运行脚本时调用run()类的validation方法,它是否会返回TRUE并运行else?也许有不同的回报?

我发生了什么事情。一般来说,如果我遇到这样的问题,我会找出一种方法来强制我正在寻找的结果。例如在你的代码中,我强迫其他人运行...一旦我运行它,分解发生的事情让它运行。简陋的,但它对我有好处。

答案 1 :(得分:0)

您在

中使用规则数组
$this->form_validation->set_rules()

错误。

如果你想传递数组中的规则,你必须坚持使用这里描述的关键名http://codeigniter.com/user_guide/libraries/form_validation.html#validationrulesasarray

所以而不是

$rules['input_name'] = "required"

试试这个:

array(
  'field' => 'input_name',
  'label' => 'Name that you output in error message',
  'rules' => 'required'
)