【发布时间】:2014-05-12 03:58:37
【问题描述】:
我在 codeigniter 中有一个表单,它有几个字段,但只需要有效填写一个。
<label for="mail_everyone">Mass Email</label>
<label><input type="checkbox" name="mail_everyone" id="mail_everyone" value="1" <?php echo set_checkbox('mail_everyone', '1'); ?>/> Send to everyone</label>
<?php echo form_error('mail_everyone'); ?>
<label for="mail_class_list">Class Email</label>
<select name="mail_class_list" id="mail_class_list">
<option value="0">- Select -</option>
<?php foreach($filter_classes as $class) : ?>
<option value = "<?=$class['class_id']?>" <?php echo set_select('mail_class_list', $class['class_id'], ('class'==$mail_type&&$class['class_id']==$mail_type_id));?>><?=$class['class_code']?></option>
<?php endforeach; ?>
</select>
<?php echo form_error('mail_class_list'); ?>
<label for="mail_mailing_list">Mailing List Email</label>
<select name="mail_mailing_list" id="mail_mailing_list">
<option value="0"> - Select - </option>
<?php foreach($mailing_lists as $list){ ?>
<option value="<?=$list['mailer_list_id']?>" <?php echo set_select('mail_mailing_list', $list['mailer_list_id'], ('mailer.list'==$mail_type&&$list['mailer_list_id']==$mail_type_id));?>><?=$list['name']?></option>
<?php } ?>
</select>
<?php echo form_error('mail_mailing_list'); ?>
然后我有验证码:
$this->form_validation->_error_array = array(); // Multiform reset
$this->form_validation->_field_data = array(); // Multiform reset
$this->form_validation->set_error_delimiters('<div class="error">', '</div>');
if ($this->form_validation->run() === false || isset($errors) && count($errors) > 0) {
$errors[] = validation_errors('<div>', '</div>');
$data['result'] = '<div class="error">' . implode('', $errors) . '</div>';
$this->session->set_flashdata('result', $data['result']);
} else {
// Check if a field has been filled in
if(
(!$this->input->post('mail_everyone') || 0 == set_value('mail_everyone')) &&
0 == set_value('mail_class_list') &&
0 == set_value('mail_performance_list') &&
0 == set_value('mail_mailing_list') &&
0 == set_value('mail_filter_list')
) {
//No filters have been set
$errors[] = validation_errors('<div>', '</div>');
$errors[] = '<div>No valid mail type has been selected</div>';
$data['result'] = '<div class="error">' . implode('', $errors) . '</div>';
$this->session->set_flashdata('result', $data['result']);
}
$data['result'] = '<div class="success">Inserted : <em>' . $this->settings->format_datetime() . '</em></div>';
$this->session->set_flashdata('result', $data['result']);
}
我需要让表单只需要填写一个字段。目前我检查验证,然后检查是否填写了任何字段,但是这段代码不起作用。这是我第一次深入研究 codeigniter,文档对我帮助不大。
【问题讨论】:
-
您可以创建一个自定义回调来检查每个字段并根据它们是否设置返回真/假。只需在 1 个字段验证规则中设置相同的回调。例如。
$this->form_validation->set_rules('mail_everyone', '', 'callback_check_mail_field');和控制器中的function check_mail_field(){}。欲了解更多信息,请查看ellislab.com/codeigniter/user-guide/libraries/… -
但是如何检查它们是否已设置?
标签: php forms codeigniter validation