Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter form_helper将数据库行设置为选择菜单中的值_Php_Codeigniter - Fatal编程技术网

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;
}

太愚蠢了,我必须在拉出查询->结果后,将查询结果放入那里的数组中