Php Codeigniter form_helper将数据库行设置为选择菜单中的值
我正在写一个表单,里面有一个选择菜单,我想从数据库中提取值,所以我认为应该是这样的: 我的看法Php Codeigniter form_helper将数据库行设置为选择菜单中的值,php,codeigniter,Php,Codeigniter,我正在写一个表单,里面有一个选择菜单,我想从数据库中提取值,所以我认为应该是这样的: 我的看法 <?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_c
<?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();
?>
我的模型
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
您需要返回一个字符串数组,result()是一个对象数组 也许可以在您的模型中尝试此功能:
return $query->result_array();
您需要向下拉列表传递一个数组,其中数组键将是发布的值,值将是显示的文本 要实现此目的,请按如下方式更改控制器:
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);
<?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;
}
}
通过传入一个或两个键来支持多维数组,或者通过使用值作为值和键来支持一维数组
例如:array_to_select(array('value1','value2'))给出array('value1'=>'value1','value2'=>'value2')在您的视图中,您可以将foreach添加到那里,而不是在模型中
<?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外科医生的数组帮助器,以使用仅包含两个字段(id和值)的简单db查询。因此,helper类现在如下所示:
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);
<?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;
}
太愚蠢了,我必须在拉出查询->结果后,将查询结果放入那里的数组中