Проверка выпадающего списка форм в CodeIgniter

Я использую помощник формы CodeIgniter и библиотеку проверки формы для создания моих форм. У меня возникли проблемы с тем, чтобы сделать выпадающий список "липким", а также найти соответствующие правила проверки.

вот как я заполняю drodown:

foreach($events as $event){
$options[$event->event_title] = $event->event_title;
}
$firstItem = '<option>Please select one...</option>';
echo form_dropdown('events', $options, '', $firstItem);

это построение параметров из событий, хранящихся в базе данных. Форма выглядит отлично и заполняет все поля правильно.

Hwoever, когда я прихожу, чтобы отправить форму, раскрывающийся список не удерживает значение выбрано? Кроме того, как я должен проверить его, я хочу сделать это необходимым, но я также хочу убедиться, что я не за исключением первого варианта в раскрывающемся списке " пожалуйста, выберите один...'

спасибо заранее.

Ура, Газ!--2-->

5 ответов


вы делаете это в представлении? Я покажу вам, что я справляюсь с этим, но все это происходит в контроллере:

// first, we can set a validation rule for the input 'country' (our dropdown), in this case it is required, and must be a natural number. You can look up more rules in the CI user guide, and you can write your own functions as well and add them to the 3rd parameter here. I believe some native PHP functions can be used as well.
$this->form_validation->set_rules('country', 'Country', 'required|is_natural');

// the form is not valid! we'll enter this block whenever the form validation rules above are not met, as well as when first going to this controller-action.
if ($this->form_validation->run() == FALSE) {
    // buid your form, there's some CI functions to help with this that I'm using
    $my_form = form_open('user/edit', 'class="superform"')
        . form_fieldset()
        . '<ol>'
        . '<li>'
        . form_label('Country<br/>', 'country')
        // so here is the dropdown, matching the name given to the validation rule we've set, the second parameter takes an array, which I am grabbing from a model, the last parameter is the 'selected; value, which I am grabbing from some variable, if it's not present the first item in the dropdown will obviously be selected
        . form_dropdown('country', $this->Country_model->get_countries_dropdown(), $user->country)
 . form_error('country', ' <em>', '</em>'
        . form_submit('mysubmit', 'Save', 'class="button"')
        . '</li>'
        . '</ol>'
        . form_fieldset_close()
        . form_close()
    );
    // sending the form variable to my view, where i will simply <?=$my_form?> it
    $this->load->view('user_edit', $my_form);
} else {
    // form has validated! do something!
}

функция form_dropdown () принимает массив, который настроен как: $ключевая ценность Где ключ в моем случае-идентификатор страны, а значение-имя страны. У меня есть пара ' 0 '= > 'NONE' в начале массива моей страны, поэтому пользователь не может выбрать один. Если бы я хотел сделать это необходимым, как ваша ситуация, я мог бы установить его в " -1 "= > " Пожалуйста, выберите...' и он не будет проверять, так как -1 не является натуральным числом.

Надеюсь, мой бессвязный помогает!

Edit:

хорошо, поэтому, прежде чем создавать раскрывающийся список с помощью form_dropdown(), вы захотите проверить выбранное значение из массива POST.

в случае CI вы можете использовать функцию set_value ($input), поэтому в моей форме примера я мог бы сделать что-то вроде:

$selected = (!empty(set_value('country'))) ? set_value($country) : '';

form_dropdown('country', $this->Country_model->get_countries_dropdown(), $selected)

теперь выбранное значение выпадающего списка будет установлено в что было выбрано на последнем посту. Вы можете проверить это значение, чтобы убедиться, что он действителен. Если ничего не было выбрано, вы можете установить $selected как что-то вроде текущего значения в базе данных или значения по умолчанию.


в вас строку:

echo form_dropdown('events', $options, '', $firstItem);

просто сделать это:

echo form_dropdown('events', $options, set_value('events'), $firstItem);

лично мне очень нравится строить свою форму в представлении, а не смешивать презентацию с контроллером. Но это только мое мнение. Я понимаю, что нужно предварительно загрузить данные, если это большой список, но я не думаю, что вам действительно нужно создавать всю форму только для выпадающего списка. У меня была та же проблема, и на самом деле я немного докопался, чтобы найти хорошее решение.

для проверки выбора вариантов
Все, что я сделал для этого, это предоставил обычай метод класса контроллера, который выглядит примерно так

function select_validate($selectValue)
{
    // 'none' is the first option and the text says something like "-Choose one-"
    if($selectValue == 'none')
    {
        $this->form_validation->set_message('select_validate', 'Please pick one.');
        return false;
    }
    else // user picked something
    {
        return true;
    }
}

в вашем index() (или какой бы метод не обрабатывал данные и не загружал представление) вы устанавливаете код проверки для выпадающего списка.

$this->form_validation->set_rules('select', 'Select', 'callback_select_validate');

Это важно что вы префикс вашей пользовательской функции с "callback_".

Сохранения Выбора Пользователя Сохранение выбора очень просто, если вы используете то, что CI дает вам. Вам просто нужно использовать функция set_select () для каждого параметра в списке выбора.

Итак, предположим, у вас есть выпадающий список с двумя вариантами, чтобы сделать его легким. Это все, что ты делаешь.

<select name="select">
    <option value="none" <?php echo set_select('select', 'none', true);?> >- Select One -</option>
    <option value="one" <?php echo set_select('select', 'one');?> >Option one</option>
    <option value="two" <?php echo set_select('select', 'two');?> >Option two</option>
</select>

что приятно в использовании этой функции, так это то, что она предварительно выбирает первый "фиктивный" вариант, а затем, если пользователь делает выбор, но не выполняет другие проверки, выбор будет сохранен и предварительно выбран после публикации формы и предложит пользователю исправить другие ошибки.

снова, это может не удовлетворить всех, но это довольно прямое решение для проверки выпадающего списка с помощью CodeIgniter.


я столкнулся с этой проблемой, а после прочтения рекомендуемого сообщения здесь, я получил его работу, но я был раздражен из-за сообщения проверки, которое он возвращает. Однако я считаю, что нашел лучший вариант:

foreach($events as $event){
    $options[$event->event_title] = $event->event_title;
}

$firstItem[''] = 'Please select one...';

// I used array merge to ensure that my firstItem was infact my first item, 
// otherwise you could just do $options[''] = 'Please select one...'. 
// Array_unshift also does not allow you to specify the [''] array key we want
$options = array_merge($firstItem, $options);

$selected_option = $this->input->post('events', TRUE) ? $this->EE->input->post('events', TRUE) : '';

echo form_dropdown('events', $options, $selected_option);

тогда с проверкой вы можете просто сделать:

$this->form_validation->set_rules('events', 'Events', 'required');

затем проверка возвращает обычное "требуемое" сообщение


имел ту же проблему и сумел ее решить:

  • проверка javascript с помощью Spry проверки javascript
  • функция обратного вызова codeigniter в классе проверки формы

Если вам может понадобиться конкретный код, я могу помочь