我正在尝试在 Codeigniter 中验证多选下拉表单验证,并且我正在使用自定义验证回调方法进行验证。 我尝试了几个StackOverflow答案,但没有一个对我有用。我错过了什么吗?
这是我的视图代码。
<?php echo form_open_multipart('Register/user_register') ?>
<div class="form-group">
<label for="musicGen">Select Your Music Genre</label>
<?php echo form_error('musicGen'); ?>
<select class="form-control" name="musicGen[]" multiple="multiple" id="musicGen">
<?php
foreach ($genre as $row) {
echo '<option class="form-control" value="' . $row->genreId . '">' . $row->genreName . '</option>';
}
?>
</select>
</div>
<?php echo form_close() ?>
这是我的控制器。
$this->form_validation->set_rules('musicGen', 'Music Genre', 'required|callback_multiple_select');
public function multiple_select()
{
$music_genre = $this->input->post('musicGen');
if (is_null($music_genre)) {
$this->form_validation->set_message('multiple_select', 'Select at least one Music Genre');
return false;
} else {
return true;
}
}
无需使用回调函数,除非您希望用户选择多个选项。 您可以在代码中使用以下代码
if (empty($_POST['musicGen'])) {
$this->form_validation->set_rules('musicGen', 'Music Genre', 'required',array('required' =>'Select at least one Music Genre'));
}
您有两种可能性可以解决此问题:
仅使用验证规则">必需",为此您不能索引输入字段的名称,请将其更改为 name="musicGen"':
<select class="form-control" name="musicGen" multiple="multiple" id="musicGen">
和
$this->form_validation->set_rules('musicGen', 'Music Genre', 'required');
或者,将回调函数">multiple_select"与索引名称字段一起使用。这更有意义,因为您的回调要求至少选择一个选项(与is_null一起检查( 您可能还想检查选择了多个选项,请使用计数执行此操作
<select class="form-control" name="musicGen[]" multiple="multiple" id="musicGen">
并将验证规则更改为:
$this->form_validation->set_rules('musicGen', 'Music Genre', 'callback_multiple_select');
public function multiple_select()
{
$music_genre = $this->input->post('musicGen');
if (count($music_genre)<2) {
$this->form_validation->set_message('multiple_select', 'Select at least two Music Genre');
return false;
} else {
return true;
}
}