【问题标题】:If condition not working with CodeIgniter validation如果条件不适用于 CodeIgniter 验证
【发布时间】:2015-04-25 16:18:54
【问题描述】:

我正在使用 CodeIgniter!我有 3 个单选按钮 - 选择角色。如果您选择三个单选按钮之一,您会看到不同的下拉菜单。我想制定验证规则 - 仅在您选择的单选按钮的这些下拉列表中回显验证错误。我试过这个,但它没有显示任何验证错误。 首先,我的单选按钮是:

 <input type="radio"   name="role_id[]" onClick='showHide(this, true)' id="radio1"  value="1" />
 

   $data=array(
    'name' => 'role_id[]',
    'value' => '2', 
    'id' => 'radio2',
    'onclick' => 'showHide(this, true)'
    );
  echo form_radio($data);

  $data=array(
    'name' => 'role_id[]',
    'value' => '5',
    'id' => 'radio5',
 'onclick' => 'teachers_show(this, true)'
    );
  echo form_radio($data);

我的控制器是:

 public function register()
    {
      ​
 if ($this->input->post('role_id[]') === 1){
        $this->form_validation->set_rules('first_name', First name', 'trim|required');
        $this->form_validation->set_rules('last_name', 'Last name', 'trim|required'); 
        $this->form_validation->set_rules('username', 'username', 'trim|required|min_length[6]|max_length[12]|is_unique[users.username]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[6]'); 
        $this->form_validation->set_rules('password2', 'Confirm password', 'trim|required|matches[password]');  
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|is_unique[users.email]');
        $this->form_validation->set_rules('location', 'Location', 'trim|required');
        $this->form_validation->set_rules('school[]', 'School', 'required');
        $this->form_validation->set_rules('class[]', 'Class', 'required');
        $this->form_validation->set_rules('role_id[]', 'Role', 'required');
        $this->form_validation->set_rules('class_divisions[]', 'Class division', 'required');
        $this->form_validation->set_rules('region', 'Region', 'required');
        $this->form_validation->set_rules('teacher[]', 'teacher', 'required');
        
        }
     ​
 elseif ($this->input->post('role_id[]') === 2){
        $this->form_validation->set_rules('first_name', First name', 'trim|required');
        $this->form_validation->set_rules('last_name', 'Last name', 'trim|required'); 
        $this->form_validation->set_rules('username', 'username', 'trim|required|min_length[6]|max_length[12]|is_unique[users.username]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[6]'); 
        $this->form_validation->set_rules('password2', 'Confirm password', 'trim|required|matches[password]');  
        $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|is_unique[users.email]');
        $this->form_validation->set_rules('location', 'Location', 'trim|required');
        $this->form_validation->set_rules('school[]', 'School', 'required');
        $this->form_validation->set_rules('class[]', 'Class', 'required');
        $this->form_validation->set_rules('role_id[]', 'Role', 'required');
        $this->form_validation->set_rules('class_divisions[]', 'Class division', 'required');
        $this->form_validation->set_rules('region', 'Region', 'required');
      
        
        }
         elseif ($this->input->post('role_id[]') === 5 ){
            $this->form_validation->set_rules('all_teachers_show', 'ALL Teachers', 'required');

        }
        if ($this->form_validation->run()==FALSE)
        {
            $this->signup();
        }
        else 
        {  ​
//register
}
}

如果我使用这样的东西:

  if ($this->input->post('role_id[]') < 2){​
           // validation rules
     }
    
   if ($this->input->post('role_id[]') >4 ){​
           // validation rules
     }

它向我显示了验证错误,但对于 role_id=1。对于 role_id=5,我显示了针对 role_id=1 的验证错误。 你可以帮帮我吗? :) 谢谢!

【问题讨论】:

    标签: codeigniter validation if-statement


    【解决方案1】:

    您正在传递字符串'value' =&gt; '2' 并尝试将identical === 与整数2 进行比较,结果为FALSECast 你输入指定的整数,看看你得到了什么。 IE。 (int)$this-&gt;input-&gt;post('role_id[]') === 2.

    public function radiobutton()
    {
        echo form_open('test/passingthrough');
        echo '<input type="radio" name="myradio" value="1" ' . set_radio('myradio', '1', TRUE) . ' />';
        echo '<input type="radio" name="myradio" value="2" ' . set_radio('myradio', '2') . ' />';
        echo '<input type="radio" name="myradio" value="5" ' . set_radio('myradio', '5') . ' />';
        echo form_submit('mysubmit', 'Submit Radio button!');
    }
    
    public function passingthrough()
    {
        $this->form_validation->set_rules('mysubmit', '', 'required');
        $this->form_validation->set_rules('myradio', '', 'required');
    
        if ($this->form_validation->run() == FALSE) {
            redirect('test/radiobutton', 'refresh');
        } else {
            echo '<pre>', var_dump($this->input->post('myradio'));
        }
    }
    

    在这个例子中传递的值(因为它是无线电,肯定会有一个传递值)将是你正在寻找的东西。但是,如果我猜对了,您需要 NULL、FALSE 或任何未传递值的值。因此,您将在动作控制器或模型中拥有所有值的数组,并在 foreach 循环中对其进行检查:

    $possible_values = array(1, 2, 5);
    foreach ($possible_values as $p_v) {
        if ($this->input->post('role_id') == $p_v) {
            //do what do you want with TRUE 'role_id'
        } else {
            //do what do you want with FALSE 'role_id'
        }
    }
    

    【讨论】:

    • 我也尝试过: if ($this->input->post('role_id') == 2){ 但没有显示错误。我的单选按钮名为“role_id[]”,它们的值分别为 1、2 和 5。
    • 在这种情况下 == 您正在检查 equal 是否不比较数据类型。如果is_identical=== 检查数据类型(字符串、整数、布尔值...)。
    • 我刚刚编辑了我的答案,让您了解如何传递单选按钮值。详细解释可以在docs找到。现在,我再次查看您的代码,似乎您正在使用$role_id[] 创建索引数组。它从零索引开始,所以你可能会有不同的期望。如果单击第一个值,则为 $role_id[0] 而不是 $role_id[1]
    • 已编辑答案。检查一下。
    • 谢谢,我现在不太好!我习惯写 if ($this->input->post) 我还没有用这个数组写过。谢谢;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多