Проверка выпадающего списка форм в 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 в классе проверки формы
Если вам может понадобиться конкретный код, я могу помочь