Передача переменных для просмотра страницы в codeigniter

Я пытаюсь передать 2 переменные на страницу формы.

один - запрос для полей формы, а второй - переменная ошибки.

при загрузке страницы я получаю следующую ошибку:

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

Серьезность: Уведомление
Сообщение: Неопределенная переменная: ошибка
Имя файла: views/upload_form.php
Номер строки: 7

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

<?php

class Upload extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form', 'url'));
        $this->load->database();

    }

    function index()
    {
        $this->load->helper('url');
        $this->load->model('Image_model');

        $data['query'] = $this->Image_model->image_biz();

        $this->load->view('upload_form', $data, array('error' => ' ' ));
    }

    function do_upload()
    {

        $config['upload_path'] = dirname($_SERVER["SCRIPT_FILENAME"]).'/uploads/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '200';
        $config['max_width']  = '1024';
        $config['max_height']  = '768';

        $this->load->library('upload', $config);

        if ( ! $this->upload->do_upload())
        {
            $error = array('error' => $this->upload->display_errors());

            $this->load->view('upload_form', $error);

        } else {

            $image_data = array('upload_data' => $this->upload->data());

            // can be add extra feature here.

            $insert_data = array(
                    'image_file' => $image_data['upload_data']['file_name'],
                    'image_path' => $image_data['upload_data']['full_path'],
                    'image_ext' => $image_data['upload_data']['file_ext'],
                    'image_width'=> $image_data['upload_data']['image_width'],
                    'image_height' => $image_data['upload_data']['image_height'],
                     );

            $this->db->insert('image', $insert_data);//load array to database

            $this->load->view('upload_success', $image_data);

        }

    }
}
?>

Вот моя страница просмотра "upload.php":

    <html>
<head>
<title>Upload Form</title>
</head>
<body>

<?php echo $error;?>

<?php echo form_open_multipart('upload/do_upload');?>

Image: <input type="file" name="userfile" size="20" /><br>
<label for="select">Business ID:</label>
<select name="image_bizID">
    <?php foreach ($query->result() as $row) { ?>
        <option value=""><?=$row->biz_id;?></option>
    <?php } ?>
</select>

<br /><br />

<input type="submit" value="upload" />

</form>

</body>
</html>

Любая помощь в решении этой ошибки будет принята с благодарностью.

Спасибо.


person user2763616    schedule 20.07.2014    source источник


Ответы (2)


Undefined variable: error означает, что существует переменная с именем error, которая не определена.

На ваш взгляд, у вас есть эта строка:

<?php echo $error;?>

Это предполагает, что $image_data['error'] будет установлено в вашем контроллере, потому что $image_data['error'] в контроллере становится $error в представлении.

Чтобы исправить это проще всего, просто назначьте его пустой строке в контроллере:

$image_data['error'] = '';

или просто проверьте, установлен ли он первым в представлении:

<?php 
if (isset($error))
    echo $error;
?>

Есть также способы игнорировать уведомления, установив error_reporting соответствующим образом или просто подавив ошибки в этой строке, как показано ниже в представлении:

<?php @echo $error; // notice @ before echo ?>

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


ОБНОВИТЬ

Только что заметил, вы неправильно передаете переменные. Итак, это:

function index()
{
    $this->load->helper('url');
    $this->load->model('Image_model');

    $data['query'] = $this->Image_model->image_biz();

    $this->load->view('upload_form', $data, array('error' => ' ' ));
}

должно быть:

function index()
{
    $this->load->helper('url');
    $this->load->model('Image_model');

    $data['query'] = $this->Image_model->image_biz();
    $data['error'] = '';

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

Все, что вы передаете, должно быть в одном массиве или объекте, поэтому $data['query'] и $data['error'] — правильный путь, потому что мы отправляем только массив $data. Третий параметр в функции загрузки представления используется для возврата представления в виде строки вместо его рендеринга, поэтому в данном случае его использовать не следует.

Подробнее о представлениях читайте здесь: http://ellislab.com/codeigniter/user-guide/general/views.html

person Shomz    schedule 20.07.2014
comment
Спасибо. Это сработало. Теперь я получаю следующую ошибку, если я проверяю ошибку (IE. Загрузите неправильный тип файла): ‹h4›Обнаружена ошибка PHP‹/h4› ‹p›Серьезность: уведомление‹/p› ‹p›Сообщение: неопределенная переменная : query‹/p› ‹p›Имя файла: views/upload_form.php‹/p› ‹p›Номер строки: 14‹/p› ‹/div›‹br /› ‹b›Неустранимая ошибка‹/b›: Call к функции-члену result() для не-объекта в ‹b›/Applications/XAMPP/xamppfiles/htdocs/tsq/application/views/upload_form.php‹/b› в строке ‹b›14‹/b›‹br /› - person user2763616; 20.07.2014
comment
То же самое, но на этот раз $query не определено вместо $error. - person Shomz; 21.07.2014

просто измените эти строки в вашей индексной функции

$data['error']='';
$this->load->view('upload_form', $data); 

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

Или вы можете просто использовать функцию isset для проверки переменной ошибки, установлена ​​она или нет.

Справочная ссылка: http://php.net/manual/en/function.isset.php< /а>

person Feroz    schedule 30.12.2014