Codeigniter form_helper получить строки базы данных, чтобы быть значениями в меню выбора - PullRequest
2 голосов
/ 14 декабря 2009

Я пишу форму, в которой есть меню выбора, я хочу, чтобы значения извлекались из базы данных, поэтому я подумал, что это будет что-то вроде этого:

Мой взгляд

<?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

Ответы [ 6 ]

7 голосов
/ 15 декабря 2009

Вам необходимо передать массив в раскрывающийся список, где ключом массива будет значение 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;
}

Это должно сработать

3 голосов
/ 15 декабря 2009

Лично я ненавижу делать предположения в моих моделях о том, как будут использоваться мои данные, поскольку это работа контроллера. Если вы добавите 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')

1 голос
/ 14 декабря 2009

Вам необходимо вернуть массив строк, а result () - это массив объектов.

Возможно попробуйте это в вашей модели:

return $query->result_array();
0 голосов
/ 05 февраля 2012

Я отредактировал помощника по массиву Фила Суржона, чтобы он работал с простым запросом к базе данных только с двумя полями (id и значение). Итак, вспомогательный класс теперь выглядит так:

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

И вы можете снова использовать его в своем контроллере.
Надеюсь, это полезно.

0 голосов
/ 24 февраля 2011

раскрывающийся список формы с множеством параметров раскрывающееся меню формы codeigniter также с классом проверки

0 голосов
/ 15 декабря 2009

По вашему мнению, вы можете добавить 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();
?>

Не проверено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...