0

我正在使用 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
}
4

3 回答 3

7

几个月前我遇到了这样的事情。我只是添加了一个简短的 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 变量。

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

于 2013-01-17T15:57:27.673 回答
6
if($this->input->post('checkbox_name')){
    // add more validation rules here
}
于 2013-01-17T15:54:35.633 回答
0

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

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

if ($hidden_field) {
   //run more validation.
}
于 2013-01-17T15:53:23.650 回答