【问题标题】:CodeIgniter form validation optional based on valueCodeIgniter 表单验证可选,基于值
【发布时间】:2013-01-17 15:28:14
【问题描述】:

我正在使用 CI 设置一个表单,并且我正在使用表单验证来帮助我解决这个问题。

目前我有不同的规则设置,比如

$this->form_validation->set_rules('first_name', 'First Name', 'required|xss_clean');

但在我的表单中,我有一个复选框,启用该复选框将显示选中该复选框时所需的一些新输入。 当复选框未选中时,这些字段不是必需的。

在 CI 中执行此操作的最佳方法是什么?

// Set validation rules
$this->form_validation->set_rules('first_name', 'First Name', 'required|xss_clean');
$this->form_validation->set_rules('last_name', 'Last Name', 'required|xss_clean');
// Some more rules here

if($this->form_validation->run() == true) {
    // Form was validated
}

【问题讨论】:

    标签: codeigniter validation


    【解决方案1】:

    几个月前我遇到过这样的事情。我刚刚添加了一个简短的 if 语句。

    看起来像这样(例如使用地址):

    $this->form_validation->set_rules('home_address', '"Home Address"', 'required|trim|xss_clean|strip_tags');
    $this->form_validation->set_rules('unit', '"Unit"', 'trim|xss_clean|strip_tags');
    $this->form_validation->set_rules('city', '"City"', 'required|trim|xss_clean|strip_tags');
    $this->form_validation->set_rules('state', '"State"', 'required|trim|xss_clean|strip_tags');
    $this->form_validation->set_rules('zip', '"Zip"', 'required|trim|xss_clean|strip_tags');
    
    //checkbox formatted like this in the view: form_checkbox('has_second_address', 'accept'); 
    if ($this->input->post('has_second_address') == 'accept')
    {
        $this->form_validation->set_rules('street_address_2', '"Street Address 2"', 'required|trim|xss_clean|strip_tags');
        $this->form_validation->set_rules('state_2', '"State 2"', 'required|trim|xss_clean|strip_tags');
        $this->form_validation->set_rules('city_2', '"City 2"', 'required|trim|xss_clean|strip_tags');
        $this->form_validation->set_rules('zip_2', '"Zip 2"', 'required|trim|xss_clean|strip_tags');
    }
    
    if($this->form_validation->run() == true) {
        //example
        //will return FALSE if empty
        $street_address_2 = $this->input->post('street_address_2');
        //and so on...
    }
    

    我不确定这是否是 Codeigniter 方式,但上次我检查时找不到“最佳方法”方式。这绝对可以完成工作,并且至少允许您控制用户 $_POST 变量。

    无论如何,我希望这会有所帮助

    【讨论】:

    • 谢谢,与 Mudshark 发布的解决方案相同,示例总是有帮助!
    • 哈。是的,我把这些都写出来了,我想我还是提交吧。
    • 我正在使用配置数组进行验证,并将其单独放置在配置文件夹中,我遇到了同样的问题,如何根据配置数组中的复选框状态启用验证
    【解决方案2】:
    if($this->input->post('checkbox_name')){
        // add more validation rules here
    }
    

    【讨论】:

    • 是的,我一开始就是这么想的,我只是在寻找任何验证规则,而不是在 if() 中进行(我现在已经在使用)
    • 我正在使用配置数组进行验证,并将其单独放置在配置文件夹中,我有同样的问题如何根据配置数组中的复选框状态启用验证
    【解决方案3】:

    您可以使用 javascript / jquery 将隐藏字段的值设置为 true 或 false,具体取决于复选框是否已选中。

    然后在您的控制器中使用条件检查

    if ($hidden_field) {
       //run more validation.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 2011-10-24
      • 2012-11-21
      • 1970-01-01
      • 2017-02-06
      • 2016-09-05
      相关资源
      最近更新 更多