Форма Codeigniter заполняется результатами db, которые не работают

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

Пожалуйста, может кто-нибудь взглянуть на мой код и сказать мне, что я делаю неправильно.

Модель

    //This function brings up the selected users information for editing.
public function edit_user($id)
{
    $this->db->select('id, email, name, lastname, homeaddress, posteladdress, 
    mobile, hometel, idnum');
    $this->db->where('id', $id)->limit(1);
    $query = $this->db->get('user');
    return $query->result();

}

Контроллер

public function get_user_edit($id)
{
    $this->load->helper('form');
    $this->load->model('model_users'); //Load the user model

    //Get the database results from the model

    $data['results'] = $this->model_users->edit_user($id);
    foreach ($data['results'] as $key => $row)
    {
        $data['results'] = array(   'id' => $row->id,
                        'email' => $row->email,
                        'name' => $row->name, 
                        'lastname' => $row->lastname,
                        'homeaddress' => $row->homeaddress,
                        'posteladdress' => $row->posteladdress,
                        'mobile' => $row->mobile,
                        'hometel' => $row->hometel,
                        'idnum' => $row->idnum);

    }
    $this->load->view('edit_user', $data);
}

Вид

<div id="body">
        <p>Edit user information.</p>

    <?php 


    echo form_open('user_admin/user_update', $results);

    echo validation_errors();

    echo "<p><lable>Email:</lable>";
    echo form_input('email', set_value('email'));
    echo "</p>";


    echo "<p><lable>Name:</lable>";
    echo form_input('name', set_value('name'));
    echo "</p>";

    echo "<p>";
    echo form_submit('edit_submit', 'Update');
    echo "</p>";

    echo form_close();

    ?> 

Я продолжаю получать эту ошибку

Произошла ошибка PHP

Серьезность: 4096

Сообщение: Объект класса stdClass не может быть преобразован в строку

Имя файла: helpers/form_helper.php

Номер строки: 1010


person Juan-Emil Saayman    schedule 14.03.2015    source источник


Ответы (2)


Первым делом. Вы ожидаете, что из базы данных будет возвращена одна строка, верно? Но вы просматриваете результат в своем контроллере. Вместо того, чтобы делать это в вашей модели:

return $query->result();

сделай это:

return $query->row();

и удалите цикл foreach из вашего контроллера (там даже есть неиспользуемая переменная $key). В итоге вы получите более чистый и короткий код. Только если вы получаете одну строку, что, кажется, имеет место.

Идем дальше.

Вы читали документацию здесь: https://ellislab.com/codeigniter/user-guide/helpers/form_helper.html ?

form_open('user_admin/user_update', $results); - что ты здесь пытаешься сделать?

Вы используете второй параметр для передачи атрибутов открывающему тегу. Теперь, глядя на ваш код, ваш массив $results имеет значения для каждого поля. Не имеет особого смысла впихивать все это в открывающий тег формы, не так ли?

Отрисовка поля с правильными значениями.

Это пример из документации, как настроить и отобразить поле ввода:

$data = array(
              'name'        => 'username',
              'id'          => 'username',
              'value'       => 'johndoe',
              'maxlength'   => '100',
              'size'        => '50',
              'style'       => 'width:50%',
            );

echo form_input($data);

Таким образом, ваш ввод электронной почты должен быть отформатирован с минимальной конфигурацией, подобной этой:

$data = array(
              'name'        => 'email',
              'value'       => $results['email']
            );

echo form_input('email', $data);

При проверке (в вашем методе user_update() в контроллере user_admin) вам нужно будет выполнить некоторую логику, чтобы зафиксировать значение, которое вы проверяете. Итак, вам понадобится что-то вроде:

$results['email'] = set_value('email');

Надеюсь, это имеет смысл!

person Aidas    schedule 14.03.2015

Большое спасибо за Вашу помощь. Я уверен, что вы, должно быть, поняли, что я новичок в Codeigniter, но с вашей помощью я смог разобраться со своей проблемой.

Я изменил запрос, чтобы он возвращал только один результат, который он нашел, как вы предложили.

return $query->row();

и вы были правы, мне не нужен цикл foreach для заполнения массива для передачи в представление.

Спасибо, что указали, что я пытался передать результаты из БД в качестве атрибута для формы. :)

Я добавил свой код ниже для всех, кто сталкивается с моим вопросом с той же проблемой. Может быть, это поможет им.

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

    public function get_user_edit($id)
{
    $this->load->model('model_users'); //Load the user model

    //Get the database results from the model

    $data['results'] = $this->model_users->edit_user($id);
    $this->load->view('edit_user', $data);
}

Моя модель

    //This fetches the selected users information for editing.
public function edit_user($id)
{
    $this->db->select('id, email, name, lastname, homeaddress, posteladdress, 
    mobile, hometel, idnum');
    $this->db->where('id', $id)->limit(1);
    $query = $this->db->get('user');
    return $query->row();

}

Мой взгляд

<div id="container">
<h1>Edit user</h1>

<div id="body">
        <p>Edit user information.</p>

    <?php 



    echo form_open('user_admin/user_update');

    echo validation_errors();

    echo form_hidden('id', $results->id);

    echo "<p><lable>Email:</lable>";
    echo form_input('email', $results->email);
    echo "</p>";


    echo "<p><lable>Name:</lable>";
    echo form_input('name', $results->name);
    echo "</p>";

    echo "<p><lable>Last name:</lable>";
    echo form_input('lastname', $results->lastname);
    echo "</p>";

    echo "<p><lable>Home address:</lable>";
    echo form_input('homeaddress', $results->homeaddress);
    echo "</p>";

    echo "<p><lable>Postal address:</lable>";
    echo form_input('posteladdress', $results->posteladdress);
    echo "</p>";

    echo "<p><lable>Mobile number:</lable>";
    echo form_input('mobile', $results->mobile);
    echo "</p>";

    echo "<p><lable>Home telephone:</lable>";
    echo form_input('hometel', $results->hometel);
    echo "</p>";

    echo "<p><lable>ID number:</lable>";
    echo form_input('idnum', $results->idnum);
    echo "</p>";

    echo "<p>";
    echo form_submit('edit_submit', 'Update');
    echo "</p>";

    echo form_close();

    ?> 

    </div>
person Juan-Emil Saayman    schedule 17.03.2015