Выпадающий выбор на основе записей в базе данных - PullRequest
2 голосов
/ 01 февраля 2010

Итак, я бы хотел, чтобы выбор автоматически заполнял выпадающий список «Да» или, альтернативно, «Нет». Возвращенное значение из запроса к базе данных будет использоваться для оценки того, какой выпадающий список будет выбран.

Я подумал, так как это автоматическое заполнение true / false, просто написать 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
       }

Ответы [ 4 ]

3 голосов
/ 02 февраля 2010

Вы проверяли Помощник по формам в CI? Вы можете использовать form_radio и указать значение, которое вы хотите выбрать в третьем параметре:

form_radio('field_name', 'Yes', $result == 'Yes');
form_radio('field_name', 'No', $result == 'No');

Первый параметр - это имя поля, Второй параметр - это значение для поля, а третий параметр - логический (ИСТИНА: радио выбрано, ЛОЖЬ: не выбрано). Поскольку это радио, имя поля должно совпадать.

0 голосов
/ 02 августа 2010

Спасибо, Эриско, вы только что помогли мне чем-то своим постом.

Моя версия, хотя и является более простой и урезанной, не ссылаясь ни на какие пары ключ => значение. Он просто устанавливает массив, содержащий все параметры из предыдущего выпадающего меню, циклически просматривает его [так же, как он заполняет выпадающее меню), и устанавливает параметр «выбранный», если он совпадает с тем, который пользователь ранее выбрал, и хранится в базе данных:

<?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>';
?>

Переполнение стека - ЛУЧШИЙ. Вы, ребята, рок:).

0 голосов
/ 02 февраля 2010

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

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

$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
        }
    }
}

Вы можете даже обернуть это в функцию для повторного использования.

0 голосов
/ 02 февраля 2010

Нечто подобное должно работать. Я делаю много предположений относительно ваших требований и данных.

// 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>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...