Как заставить form_dropdown() показывать выбранное значение в Codeigniter?

Я пытаюсь заполнить выпадающий список из базы данных. В моем файле просмотра у меня есть следующий код

$batch= $query ['batch']; // I pull this data from a separate model 
echo form_dropdown('shirts', $options, $batch);

Теперь выпадающий список заполняется данными нормально, но проблема в том, что я не получаю значение «$batch», автоматически выбираемое при загрузке страницы. Интересно, что если я повторяю $batch, в другом месте страницы отображаются правильные данные, что означает, что с $batch все в порядке.

Вот мой контроллер

function update($id){
$this->load->model('mod_studentprofile');
             $data['query']= $this->mod_studentprofile->student_get($id);
             $data['options']= $this->mod_studentprofile->batchget();

             $data['tab'] = "Update Student Information";
                 $data['main_content']='update_studentprofile';
                 $this->load->view('includes/template',$data);
            }     

А вот и моя модель

 function batchget() {

      $this->db->select('batchname');
       $records=$this->db->get('batch');

            $data=array();

                        foreach ($records->result() as $row)
                {
                    $data[$row->batchname] = $row->batchname;
                }

            return ($data);
        } 

Не могли бы вы помочь мне решить эту проблему. Я хочу, чтобы значение "$batch" автоматически выбиралось в раскрывающемся списке при загрузке страницы.

Заранее спасибо.

РЕДАКТИРОВАТЬ... моя модель для student_get($id)

  function student_get($id)
    {
        $query=$this->db->get_where('student',array('studentid'=>$id));
        return $query->row_array();
    }      

Спасибо :)


person black_belt    schedule 07.09.2011    source источник
comment
@ Крис Шмитц. спасибо за ответ. HTML-код, отображаемый в представлении для выбора: $batch= $query ['batch']; echo form_dropdown('рубашки', $options, $batch);   -  person black_belt    schedule 08.09.2011


Ответы (2)


Я думаю, что, вероятно, происходит то, что значение в $batch может соответствовать тому, что отображается в раскрывающемся списке, но не фактическому ключу в $options для этой конкретной опции, которая будет частью value="" html.

Например...

// this wouldn't select 'foo' as you may be thinking
$options => array('0' => 'foo', '1' => 'bar');
$batch = 'foo';
echo form_dropdown('shirts', $options, $batch);

// this would select foo
$options => array('foo' => 'foo', 'bar' => 'bar');
$batch = 'foo';
echo form_dropdown('shirts', $options, $batch);

Изменить в ответ на комментарий ОП:

Метод batchget() выглядит так, как будто он возвращает ваш массив $options в правильном формате, а ваш метод student_get() возвращает row_array. Похоже, что в представлении вы присваиваете значение одного из ключей, возвращаемых методом student_get, как выбранное значение, хранящееся в $batch, которое затем передается в качестве третьего аргумента в form_dropdown().

Все это кажется правильным. Пока значение $batch действительно является одним из ключей массива, который находится в $options, тогда form_dropdown() установит один из параметров раскрывающегося списка как выбранный.

person Anthony Jack    schedule 07.09.2011
comment
Спасибо за ответ. Вы правы, но, вероятно, вы не заметили, что это уже было в моей модели: $data[$row-›batchname] = $row-›batchname; который, я думаю, следует вашей инструкции. Пожалуйста, проверьте мою модель, если она в порядке. Еще раз спасибо. - person black_belt; 08.09.2011

Отладка вещей.

var_dump() $options, var_dump() $batch, посмотрите на эти два и посмотрите, где вы ошиблись.

Третий вариант должен быть значением ключа, а не значением метки.

Энтони Джек, вероятно, прав.

person Phil Sturgeon    schedule 07.09.2011