Атрибут выбора "selected"

У меня здесь абсолютный ум. В основном, что я сделал, создается мини-менеджер статей. Каждой статье может быть присвоена одна из следующих категорий, которые определены в раскрывающемся списке выбора.

  • дизайн
  • развитие
  • Другие

Когда я перехожу к редактированию статьи, я извлек данные из базы данных и заполнил входы и текстовую область.

Теперь я пытаюсь применить selected атрибут к опции, соответствующей категории статьи. Следующее – это то, что я сделал, и я уверен, что вы согласитесь, это плохой подход:

 <?php if($category == 'Design') { ?> <option value="Design" selected>Design</option> <option value="Development">Development</option> <option value="Other">Other</option> <?php } elseif($category == 'Development') { ?> <option value="Design">Design</option> <option value="Development" selected>Development</option> <option value="Other">Other</option> <?php } else { ?> <option value="Design">Design</option> <option value="Development">Development</option> <option value="Other" selected>Other</option> <?php } ?> 

Итак, вопрос заключается в том, как я могу реализовать более динамичный метод применения selected атрибута к <option> зависимости от категории статьи?

Почему бы просто не определить категории в массиве и не зацикливать его:

 <?php $cats = array('Design', 'Development', 'Other'); foreach($cats as $cat) { $selected = ($cat == $category) ? ' selected="selected"' : ''; echo '<option value="'.$cat.'"'.$selected.'>'.$cat.'</option>'; } ?> 

Конечно, это имеет дополнительное преимущество, которое, если вам нужно добавить новую категорию, просто добавьте ее в массив.

Поместите категории в массив, затем сделайте что-то вроде:

 $categories = Array("Foo", "Bar", "Baz"); $preselected_category = "Bar"; foreach ($categories as $category) { $html = htmlspecialchars($category); $selected = ""; if ($category == $preselected_category) { $selected = "selected"; } ?> <option value="<?=$html?>" <?=$selected?>> <?=html?> </option> <?php } 

используйте его, как показано ниже

 <option value="Design" <?=($category == 'Design')?'selected':''?> >Design</option> <option value="Development" <?=($category == 'Development')?'selected':''?>>Development</option> <option value="Other" <?=($category == 'Other')?'selected':''?>>Other</option> 

Как насчет этого?

 <option value="Design" <? if($category == 'Design') { echo 'selected';} ?>>Design</option> <option value="Development" <? if($category == 'Development') { echo 'selected';} ?>>Development</option> <option value="Other" <? if($category == 'Othe') { echo 'selected';} ?>>Other</option> 

Вы можете использовать массив для хранения категорий и прокручивать его для генерации вашего html.


 <?php $categories = array( 'Design', 'Development', 'Other', ); $category = 'Design'; foreach($categories as $cat) { $selected = ($category == $cat); $selcode = ($selected ? ' selected' : ''); $html = '<option value="'.$cat.'"'.$selcode.'>'.$cat.'</option>'; echo $html . PHP_EOL; }