Я пишу форму, в которой есть меню выбора, я хочу, чтобы значения вытащили из базы данных, поэтому я подумал, что это будет что-то в этом роде:
Мой взгляд
<?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 выпадающего меню с классом проверки также