首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >代码点火器form_helper使数据库行成为选择菜单中的值

代码点火器form_helper使数据库行成为选择菜单中的值
EN

Stack Overflow用户
提问于 2009-12-14 15:51:25
回答 5查看 13.5K关注 0票数 2

我正在编写一个表单,其中有一个选择菜单,我希望从数据库中提取值,所以我认为它应该是这样的:

我的观点

代码语言:javascript
运行
复制
<?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();
?>

我的控制器

代码语言:javascript
运行
复制
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);
}

我的模型

代码语言:javascript
运行
复制
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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-14 22:20:31

您需要将一个数组传递给下拉列表,其中数组键将是POSTed的值,而值将是显示的文本。

要实现这一点,请将控制器更改如下:

代码语言:javascript
运行
复制
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);
}

并将此函数添加到模型中。

代码语言:javascript
运行
复制
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;
}

这应该能起作用

票数 7
EN

Stack Overflow用户

发布于 2009-12-15 11:18:58

我个人不喜欢在我的模型中假设如何使用我的数据,因为这是控制器的工作。如果您添加一个MY_array_helper.php并将其粘贴到:

代码语言:javascript
运行
复制
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;

}

然后你可以做这样的事情:

代码语言:javascript
运行
复制
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’‘)

票数 2
EN

Stack Overflow用户

发布于 2009-12-14 19:47:27

您需要返回一个字符串数组,结果()是一个对象数组。

也许在你的模型中试试这个:

代码语言:javascript
运行
复制
return $query->result_array();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1901703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档