Поэтому я хотел бы выбрать автоматическое заполнение выпадающего меню «Да» или, альтернативно, «Нет». Возвращаемое значение из запроса базы данных будет использоваться для оценки того, какой выпадающий список будет выбран.
Я думал, потому что это истинное / ложное авто-население, чтобы просто написать 2 условных выражения, но я думал, что будет лучше (читать: менее грязный код), чтобы написать код, который автоматически заполнил бы правильный выбор из раскрывающегося списка, основанный на результате из базы данных.
Основой кода, который я пытаюсь написать, будет проверка переменной на все выбранные, а затем добавление строки, которая выберет это выпадающее для пользователя в представлении.
Мой вопрос заключается в том, есть ли более простой способ сделать это, вместо того, чтобы писать условные обозначения для каждого возможного значения выпадающего значения?
Код по запросу, написанный на CodeIgniter PHP:
$this->db->select('row'); $result = $this->db->get('table'); // This just selects and returns the values. This code does work, I'm just looking for a better way to do this task that someone might know, because I'm going to have drop downs with hundreds of possibilities, of which, I want the predefined one to be selected. // Assume $result->row = "Yes" if ( $result = "Yes" ) { #Code for echo'ing radio button with "Yes" selected } else { #Code for echo'ing radio button with "No" selected }
Вы проверяете Form Helper в CI? Вы можете использовать form_radio
и указать значение, которое вы хотите выбрать в третьем параметре:
form_radio('field_name', 'Yes', $result == 'Yes'); form_radio('field_name', 'No', $result == 'No');
Первый параметр – это имя поля, второй параметр – значение для поля, а третий параметр – логический (TRUE: радио выбрано, FALSE: не выбрано). Поскольку это радио, имя поля должно совпадать.
Что-то вроде этого должно работать. Я делаю много предположений относительно того, каковы ваши требования и данные.
// The selected value $selectedValue = 'foo'; // Database results, assuming a structure like so $results = array( array( 'id' => 1, 'value' => 'foo' ), array( 'id' => 2, 'value' => 'bar' ) ); echo '<select name="selectField">'; foreach ($results as $result) { echo '<option value="'.$result['id'].'"'; // Here we see if this result is the selected value. // If so, we spit out the HTML so the user's browser renders it as such. if ($result['value'] == $selectedValue) { echo ' selected="selected"'; } echo '>'.$result['value'].'</option>'; } echo '</select>';
Ваш вопрос кажется немного запутанным. Вы указываете радиокнопки в своем коде, но ваш вопрос спрашивает о выпадающих меню.
Если вам нужно отобразить набор переключателей или раскрывающихся опций на основе заданного значения, вы можете определить свой выбор как массив:
$data = array( 'yes' => array('option1', 'option2', 'option2', 'etc'), 'no' => array('option1', 'option2', 'option2', 'etc'), 'somethingelse' => array('option1', 'option2', 'option2', 'etc') );
И используйте его вот так:
$query = $this->db->select('row')->get(); if ($query->num_rows() > 0) { $result = $query->row(); if (array_key_exists(strtolower($result->row), $data)) { foreach ($data[$result->row] as $row) { // Use $row as you need } } }
Вы могли бы даже превратить это в функцию для повторного использования.
Спасибо, Эриско, ты просто помог мне с чем-то по почте.
Моя версия, хотя и более простая и упрощенная, без ссылки на пары ключей => значение. Он просто устанавливает массив, содержащий все параметры из предыдущего раскрывающегося меню, циклически проходит через него [по мере того, как он заполняет выпадающее меню]], и устанавливает параметр «selected», если он соответствует тому, который был выбран предыдущим пользователем хранится в базе данных:
<?php $naybpopulate = array('Bernal Heights', 'Castro', 'Chinatown', 'Cole Valley', 'Fishermans Wharf', 'Forest Hill', 'Haight-Ashbury', 'Hayes Valley', 'Inner Richmond', 'Inner Sunset', 'Japantown', 'Marina', 'Mission', 'Mission Bay', 'Nob Hill', 'Noe Valley', 'North Beach', 'Outer Richmond', 'Outer Sunset', 'Pacific Heights', 'Potrero Hill', 'Presidio', 'Russian Hill', 'SoMa', 'South Beach', 'Telegraph Hill', 'Tenderloin', 'Union Square', 'Western Addition', 'West Portal'); echo '<select name="neighborhood" id="neighborhood">'; foreach ($naybpopulate as $nayb) { echo '<option value="'.$nayb.'"'; // Here we see if this result is the selected value. // If so, we spit out the HTML so the user's browser renders it as such. if ($nayb == $neighborhood) { echo ' selected="selected"'; } echo '>'.$nayb.'</option>'; } echo '</select>'; ?>
Переполнение стека является ЛУЧШИМ. Вы, ребята, рок :).