Заполнить выпадающий список из базы данных - PullRequest
3 голосов
/ 02 сентября 2010

Я использую этот код для повторного заполнения выпадающего списка из базы данных:

      $city_id = 15;
  while($row = mysql_fetch_assoc($result)) { 
          $selected = ($row['city_id'] == $city_id) ? 'selected="selected" ' : NULL;
          echo '<option value="'.$city_id .$selected . '">"'.$row['city_name'].'"</option>\n';

  }

Это работает как очарование, но мой вопрос - это более элегантные решения?

Ответы [ 4 ]

3 голосов
/ 02 сентября 2010

Кроме улучшения indentation кода, это нормально.

$city_id = 15;
while($row = mysql_fetch_assoc($result))
{ 
    $selected = ($row['city_id'] == $city_id) ? ' selected="selected"' : NULL;
    echo '<option value="' . $row['city_id']. '"' . $selected . '>'.$row['city_name'].'</option>\n';
}
1 голос
/ 02 сентября 2010

Что ж, более элегантным решением было бы иметь файл "контроллера", который выбирает все города и помещает их в массив / список объектов / что угодно.Затем в файле «view» вы перебираете эту переменную.Таким образом, вы немного больше отделяете представление от логики.

Вид:

<select name=student value=''>Student Name</option>
    <?php foreach($cities as $city): ?>
        <option value="<?php echo $city->id ?>" ><?php echo $city->name ?></option>
    <?php endforeach; ?>
</select>

Кроме того, я бы настоятельно рекомендовал использовать PDO для доступа к БД.

0 голосов
/ 02 сентября 2010

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

function select($name, $default, $values, $style='', $param='') {
        $html = '<select name="'.$name.'" style="'.$style.'" '.$param.' >';
        foreach($values as $i => $data) {
            if (isset($data['noFormat'])) { 
                $html .= '<option value="'.$data['value'].'" '.(($data['value']==$default)?'SELECTED="SELECTED"':'').' '.
                         (isset($data['style']) ? ' style="'.$data['style'].'" ' : '').'>'.$data['text'].'</option>';
            } else {
                $html .= '<option value="'.htmlentities($data['value']).'" '.(($data['value']==$default)?'SELECTED="SELECTED"':'').' '.
                         (isset($data['style']) ? ' style="'.$data['style'].'" ' : '').'>'.htmlentities($data['text']).'</option>';
            }
        }
        $html .= '</select>';
        return $html;                 
    }

Затем перебираю запрос, чтобы построить массив следующим образом:

$default[] = array('value' => '0',   'text' => 'Select a City...');
while($row = mysql_fetch_assoc($result)) {  
    $list[] = array('value' => $row['city_id'], 'text' => $row['city_name']);
}
$list = array_merge($default,$list);

И, наконец, пример для создания HTML:

select('select','form_el_name',$list['0'],$list,'font-size:12px;','onChange="document.forms[0].submit();"');

Надеюсь, это поможет!

0 голосов
/ 02 сентября 2010
  1. mysql_fetch_assoc to mysql_fetch_array
  2. добавить надлежащие комментарии
  3. используйте стандартный класс php ezsql или простые классы

    $query="SELECT name,id FROM student";
    
    /* You can add order by clause to the sql statement if the names are to be displayed in alphabetical order */
    
    $result = mysql_query ($query);
    echo "<select name=student value=''>Student Name</option>";
    // printing the list box select command
    
    while($nt=mysql_fetch_array($result)){//Array or records stored in $nt
    echo "<option value=$nt[id]>$nt[name]</option>";
    /* Option values are added by looping through the array */
    }
    echo "</select>";//Closing of list box 
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...