2013-03-28 2 views
1

Я пытаюсь заполнить два поля формы из данных, которые извлекаются из базы данных, чтобы пользователь мог их обновить. Таблица называется records и это довольно просто:Заполнить поля формы из базы данных с помощью Codeigniter

record_id
название
содержание

Моя модель:

function get_data() 
{ 
    $r = $this->uri->segment(3); 

    $query = $this->db->get_where('records', array('Record_ID' => $r)); 
    return $query->result(); 
} 

Мой контроллер:

function set_values() 
{ 
    $data = $this->entries_model->get_data(); 
    $this->load->view('update_view', $data);      
} 

и мое обновление вид записи:

<?php 

echo form_open('site/update',$data);?> 
Title: 
<?php echo form_input('title',set_value('title'));?> 
Content: 
<?php echo form_input('content',set_value('content')); 
echo form_submit('submit', 'Submit');?> 

<?php echo form_close();?> 

Проблема заключается в том, что я получаю следующее сообщение об ошибке:

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: data

Filename: views/update_view.php

Line Number: 10

Мой вопрос имеет два аспекта:

  1. Как я получить доступ к этой информации в моей форме представления и
  2. как я заполняю соответствующие поля.

Я новичок в Codeigniter, мои вопросы могут выглядеть упрощенными, но любая помощь будет оценена по достоинству. Заранее спасибо.

ответ

0

Там несколько вещей, здесь происходит :

  1. $ data - это массив или объект, который является passed to a view. Это ELEMENTS затем доступны как переменные в представлении. Таким образом, $ data ['myelement'] = 'somevalue' в контроллере будет доступно как $ somevalue в представлении.

  2. Если вы передадите второй параметр методу form_open(), ожидается, что это будет пара атрибутов ключа/значения для создаваемого тега. например, array ('class' => 'form_class', 'id' => 'form_id')

  3. Если вы хотите установить значения ваших входных данных формы, используйте вспомогательную функцию вида set_value(). В вашем случае используйте контроллер для установки элементов в массиве $ data, который вы передадите в представление.$data['form_values'] = array('title' => $title, 'content' => $content);

Тогда, по мнению:

+0

Спасибо за всю информацию, это действительно помогло мне понять вещи. Но как мне пойти в set_value() в представлении? Alredy попробовал предложенный синтаксис umefarooq, но я получаю ошибки, т. Е. title: '')));?> "> и получать A PHP ошибка была обнаружена Серьезность: Обратите внимание сообщение: массив для преобразования строки Имя файла: хелперов/form_helper.php Номер строки:. 1010 три раза подряд – user2220713

+0

Вот пример одного из моих приложений для того, как Я делаю это: В этом случае контроллер задает значение $ data ['envs' ] ... значение w как массив, содержащий элемент «кластер», например: $ data ['envs'] = array ('name' => $ envName, 'cluster' => $ clusterName). Итак, когда $ data было передано в представление, $ envs стал переменной типа Array, доступной в представлении. set_value() устанавливает значение элемента формы name = cluster в значение $ envs ['cluster']. Имеют смысл? – jcorry

+0

Большое спасибо jcorry, я узнал это решение через несколько дней, это точно так, как вы говорите. Еще раз спасибо за ваше время и ответы. – user2220713

0

Вы должны передать массив в свой файл вида. Так заменить:

$data = $this->entries_model->get_data(); 

с:

$data['entries_data'] = $this->entries_model->get_data(); 

и файл вида заменить:

echo form_open('site/update',$data);?> 

с:

echo form_open('site/update',$entries_data);?> 
+0

Спасибо за ответ, уже сделал это. Похоже, что он не может прочитать значения, введенные в функцию setvalue(). – user2220713

0

сначала вам нужно передать данные надлежащим образом

заменить

$data = $this->entries_model->get_data(); 

with: 

$data['data'] = $this->entries_model->get_data(); 

для установки значения в set_value вам нужно сделать проверка строки в строке, чтобы проверить либо данные, либо объект, либо нет, если объект затем поместил значение, другое просто пустое

<?php echo form_input('title',set_value((is_object($data)?$data->title:'')));?> 

вы должны сделать то же самое для всех полей формы

+0

Спасибо за ответ, я сделал это, и получил следующее сообщение об ошибке: – user2220713

+0

PHP-обнаружена ошибка Серьезность: Обратите внимание Сообщение: Массив для преобразования строки Имя файла: хелперов/form_helper.php Порядковый номер: 1010 – user2220713

+0

здесь вы получаете несколько записей с $ query-> result(), если вы редактируете только одну запись, тогда вам нужно вернуть $ query-> row() только одну строку – umefarooq

0

Jcory ответил на ваш вопрос, но позвольте мне добавить немного к нему.

  1. В вас модели вместо return $query->result(); сделать это return $query->row(); это потому, что с помощью возвращает обратный объект требует, чтобы вы должны петлю через результирующем на ваш взгляд
  2. Вместо $data = $this->entries_model->get_data(); это сделать $data['entry'] = $this->entries_model->get_data();
  3. По вашему мнению сделать this <?php echo form_input('title',set_value('title',$entry->title));?> Я надеюсь, эти изменения могут разрешить проблему.
Смежные вопросы