CodeIgniter表单验证单选按钮不起作用

vu8f3i0k  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(178)

我有一个带有3个单选按钮的表单。表单中的ID是唯一的,并且所有三个都有相同的名称,即“vehicle_type”。当我查看源代码时,单选按钮会正确生成

<input type="radio" name="vehicle_type" id="type_vehicle" value="1">
<input type="radio" name="vehicle_type" id="type_trailer" value="2" checked>
<input type="radio" name="vehicle_type" id="type_plant" value="3">

我没有为单选按钮组设置验证规则,但我的表单却显示该字段是必需的。
我可以通过运行以下命令来确认没有验证规则:

echo $this->form_validation->has_rule('vehicle_type');

它表示没有验证。在另一个字段(即client_name)上使用该调用将返回“boolean:1英寸
如果没有设置验证规则,为什么字段要尝试验证?

编辑

我在项目中使用Wiredesignz HMVC,因此扩展了Form_validation类。

if ($this->form_validation->run($this)) {
            $test = do_file_upload($post_data);
        } else {
            var_dump(validation_errors()); 

            // echos "The Vehicle type field is required"
        }

此问题仅发生在单选按钮上:
所有其他不带单选按钮的表单都使用相同的检查进行正确验证:($this->form_validation->run($this)
我的表单验证是使用此函数设置的:

public function set_form_validation_rules($data)
{
    foreach ($data as $field) {
        if (!empty($field['validation']['rules'])) {
            if (!is_array($field['validation']['rules'])) {
                $this->form_validation->set_rules($field['name'], $field['label'], $field['validation']['rules']);
            } else {
                foreach ($field['validation']['rules'] as $fv) {
                    $this->form_validation->set_rules($field['name'], $field['label'], $fv);
                }
            }
        }
    }
}

而单选按钮定义为:

$data['fields']['type_plant'] = [
            'name' => 'vehicle_type',
            'id' => 'type_plant',
            'input_class' => 'input-group width-100',
            'color' => 'red',
            'value' => 3,
            'validation' => '',
            'checked' => ($posts['vehicle_type'] == 3)
        ];

组中的其他两个单选按钮是相同的,只是具有不同的值和ID。

uinbv5nw

uinbv5nw1#

用这个,

$this->form_validation->set_rules('vehicle_type', 'Vehicle type', 'required');
67up9zun

67up9zun2#

application/config/autoload.php中加载用于表单验证的库和其他帮助程序

$autoload['libraries'] = array('form_validation');

$autoload['helper'] = array('form', 'url');

在控制器文件中:

$this->form_validation->set_rules('vehicle_type', 'Vehicle Type', 'required');

在视图文件中,使用以下代码打印验证错误

<?php echo validation_errors(); ?>
kokeuurv

kokeuurv3#

上面给出的答案告诉我如何使用表单验证。这不是我所要求的。我远远超出了这一点-因为它们都工作,除了单选按钮。结果是,错误地将验证数组传递给$data数组中的函数。一旦我正确地传递了数据,表单验证也工作了。

bmp9r5qi

bmp9r5qi4#

嘿,兄弟,试试这个也许能帮上忙这个方法很简单,形式上

<div class="form-group">
                    <label for="vehicle_type" class="col-sm-3 control-label">vehicle</label>
                    <div class="col-sm-9">
                       <div class="col-md-3">
                          <label><input type="radio" name="vehicle_type" id="vehicle_type" value="1"> ONE </label>
                       </div>
                       <div class="col-md-3">
                          <label><input type="radio" name="vehicle_type" value="2"> TWO </label>
                       </div>
                       <div class="col-md-3">
                          <label><input type="radio" name="vehicle_type" value="3"> THREE </label>
                       </div>
                       <small class="info help-block"></small>
                    </div>
                 </div>

设置控制器

public function add_save(){
    
      if ($this->input->post('vehicle_type') == "1"){   
        
      }else if($this->input->post('vehicle_type') == "2"){
        
      }else if($this->input->post('vehicle_type') == "3"){
        
      }else{
          $this->form_validation->set_rules('vehicle_type', 'Vehicle', 'required');
      }
    

      if ($this->form_validation->run()) {
    
          $save = [
              'vehicle_type' => $this->input->post('vehicle_type')
        ];

          $this->model_yourmoderl->add($save);
        

      } else {
          $this->data['errors'] = $this->form_validation->error_array();
      }

      $this->response($this->data);
   }

相关问题