我正在编写一个表单,其中有一个选择菜单,我希望从数据库中提取值,所以我认为它应该是这样的:
我的观点
<?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
发布于 2009-12-14 22:20:31
您需要将一个数组传递给下拉列表,其中数组键将是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;
}这应该能起作用
发布于 2009-12-15 11:18:58
我个人不喜欢在我的模型中假设如何使用我的数据,因为这是控制器的工作。如果您添加一个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(数组(‘value2 1’,'value2'))给出数组(‘value2 1’=‘value2 1’,‘value2 2’=‘value2 2’‘)
发布于 2009-12-14 19:47:27
您需要返回一个字符串数组,结果()是一个对象数组。
也许在你的模型中试试这个:
return $query->result_array();https://stackoverflow.com/questions/1901703
复制相似问题