2010-09-02 12 views
3

I`m с помощью этого кода заселить выпадающий список из базы данных:Populate выпадающий список из базы данных

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

    } 

It`s работает как шарм, но мой вопрос они более элегантность решение?

+2

У вас есть два опечатка @ часть эха: не $ city_id, а $ row ['city_id'], и вы помещаете 'selected' часть внутри' value'. Кстати, вы не можете сделать это более элегантно. – fabrik

ответ

0

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

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

кто подарил голосом принятый ответ и не оставлял комментарии? – Mikey1980

+0

Мой новый герой, вот кто. – DampeS8N

3

Кроме улучшения кода 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'; 
} 
0
  1. mysql_fetch_assoc в mysql_fetch_array
  2. добавить собственные комментарии
  3. использовать стандартный PHP класс ezsql или simple class tuts

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

Ну, более элегантное решение будет иметь Файл «controller», который извлекает все t он городов помещает их в список массивов/объектов/что угодно. Затем в файле «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

Довольно многое, что я делаю, и то, что я собираюсь представить как решение. –

+0

Спасибо. Я не думаю, что эхо-материал можно назвать «изящным». В любом случае, еще более элегантным было бы использование правильной структуры. – Nacho

Смежные вопросы