Codeigniter form_helper получает строки базы данных в значениях в меню выбора

Я пишу форму, в которой есть меню выбора, я хочу, чтобы значения вытащили из базы данных, поэтому я подумал, что это будет что-то в этом роде:

Мой взгляд

<?php echo form_open('admin/save_content'); echo form_fieldset(); echo form_dropdown('categories', $select_options); echo form_submit('category_submit', 'Submit'); echo form_fieldset_close(); echo form_close(); ?> 

Мой контроллер

 function add_content() { $data = array(); $this->is_logged_in(); $this->load->model('category_model'); $data['select_options'] = $this->category_model->get_all_online(); $this->load->view('admin/content/add_content', $data); } 

моя модель

 public function get_all_online() { $this->db->select('*'); $this->db->from('category'); $this->db->where('category_online', 1); $query = $this->db->get(); return $query->result(); } 

теперь, когда я помещаю $selected_options в раскрывающийся список формы, я получаю эту ошибку,

Возникла ошибка PHP

Уровень серьезности: 4096

Сообщение: объект класса stdClass не может быть преобразован в строку

Имя файла: helpers / form_helper.php

Номер строки: 331

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

Чтобы достичь этого, измените свой контроллер следующим образом:

 function add_content() { $data = array(); $this->is_logged_in(); $this->load->model('category_model'); $data['select_options'] = $this->category_model->get_all_online_select(); $this->load->view('admin/content/add_content', $data); } 

и добавьте эту функцию в свою модель

 public function get_all_online_select() { $this->db->select('id, name'); //change this to the two main values you want to use $this->db->from('category'); $this->db->where('category_online', 1); $query = $this->db->get(); foreach($query->result_array() as $row){ $data[$row['id']]=$row['name']; } return $data; } 

Это должно делать свое дело

Я лично ненавижу делать предположения в своих моделях о том, как мои данные будут использоваться, поскольку это задача контроллера. Если вы добавите MY_array_helper.php и вставьте это в:

 function array_to_select() { $args = func_get_args(); $return = array(); switch(count($args)): case 3: foreach ($args[0] as $itteration): if(is_object($itteration)) $itteration = (array) $itteration; $return[$itteration[$args[1]]] = $itteration[$args[2]]; endforeach; break; case 2: foreach ($args[0] as $key => $itteration): if(is_object($itteration)) $itteration = (array) $itteration; $return[$key] = $itteration[$args[1]]; endforeach; break; case 1: foreach ($args[0] as $itteration): $return[$itteration] = $itteration; endforeach; break; default: return FALSE; break; endswitch; return $return; 

}

Тогда вы можете сделать что-то вроде этого:

 function add_content() { $data = array(); $this->is_logged_in(); $this->load->model('category_model'); $this->load->helper('array'); $data['select_options'] = array_to_select($this->category_model->get_all_online(), 'id', 'title'); $this->load->view('admin/content/add_content', $data); 

}

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

Например: array_to_select (array ('value1', 'value2')) дает массив ('value1' => 'value1', 'value2' => 'value2')

Вам нужно вернуть массив строк, result () – это массив объектов.

Возможно, попробуйте это в своей модели:

 return $query->result_array(); 

На ваш взгляд, вы можете добавить foreach там, а не в Model.

 <?php echo form_open('admin/save_content'); echo form_fieldset(); foreach($select_options->result_array() as $row){ $data[$row['id']]=$row['name']; echo form_dropdown('categories', $row); } echo form_submit('category_submit', 'Submit'); echo form_fieldset_close(); echo form_close(); ?> 

Не испытано.

Я редактировал помощник массива Phil Surgeon для работы с простым db-запросом только с двумя полями (id & value). Итак, класс помощника теперь выглядит следующим образом:

 <?php function array_to_select() { //get args $args = func_get_args(); //get args key names $keys = array_keys($args[0][0]); //set return array $return = array(); foreach ($args[0] as $itteration){ //$itteration[$keys[0]] is field id value, $itteration[$keys[1]] is field name value $return[$itteration[$keys[0]]] = $itteration[$keys[1]]; } return $return; } 

И вы можете использовать его снова в своем контроллере.
Надеюсь, это полезно.

форма выпадающего списка с множеством вариантов codeigniter form выпадающего меню с классом проверки также