Неопределенная переменная Проблема между различными версиями PHP? - PullRequest
0 голосов
/ 15 апреля 2011

Я использую XAMPP 1.7.2 (PHP 5.3) для развертывания на winxp localhost. Там функция работает довольно хорошо. Поставляется из модуля CodeIgniter.

function get_cal_eventTitle($year, $month){
        $this->db->where('eventYear =', $year);
        $this->db->where('eventMonth =', $month);
        $this->db->select('eventTitle');
            $query = $this->db->get('tb_event_calendar');

        $result = $query->result(); 

        foreach ($result as $row)
        {
            $withEmptyTitle = $row->eventTitle;         
            //echo $withEmptyTitle.'<br>';
            $noEmptyTitle = str_replace(" ","%20",$withEmptyTitle);
            $withUrlTitle = '<a href='.base_url().'index.php/calendar/singleEvent/'.$year.'/'.$month.'/'.$noEmptyTitle.'/'.'>'.$withEmptyTitle.'</a>';         
            //echo $withUrlTitle.'<br>';
            $row->eventTitle = $withUrlTitle;          
        }
        return $result;
    }

Когда я загружаю свой код на удаленный сервер (PHP 5.2.9). Это показывает ошибку, как это,

withEmptyTitle неопределенная переменная

A PHP Error was encountered
Severity: Notice

Message: Undefined variable: withUrlTitle

Filename: models/calendar_model.php

Line Number: 54 // $withEmptyTitle = $row->eventTitle;  

Но когда я включаю комментарий для строки echo $withEmptyTitle.'<br>';. Хорошо работает на удаленном сервере.

Предположим, withEmptyTitle эхо-сигнал к Апр запущенного события здесь.

Не знаю почему? Не могли бы вы дать мне несколько советов, чтобы решить эту проблему? Ценится за ваш вклад.

1 Ответ

1 голос
/ 15 апреля 2011

То, что вы видите, вероятно, не ошибка , а предупреждение .

PHP может выдавать предупреждение, потому что вы используете переменную, котораяне был инициализирован.Вполне вероятно, что в вашей локальной PHP-установке разработки есть предупреждающие сообщения, а в живом сервере они включены.(На самом деле, лучшей практикой было бы иметь его наоборот!)

В этом случае возможно, что $withEmptyTitle = $row->eventTitle; не инициализирует переменную $withEmptyTitle, если свойство eventTitle возвращаеткак не установлено.Затем он будет следовать за следующей строкой и выдаст предупреждение, когда вы попытаетесь использовать переменную в вызове str_replace().

Вы можете избежать этого предупреждения:

  • Отключение предупреждающего сообщенияв PHP.ini
  • Выполнение ini_set() для его отключения во время выполнения программы.
  • с использованием isset($withEmptyTitle) для проверки того, что переменная установлена ​​перед ее фактическим использованием.
  • Обеспечение того, что $row действительно содержит свойство eventTitle (в контексте вашей программы, если оно отсутствует, это может означать неверные данные или неправильную настройку таблицы базы данных? В любом случае, вы можете изменить SQL-запрос на использованиеIFNULL() или, по крайней мере, убедитесь, что поле явно запрошено.

[РЕДАКТИРОВАТЬ]

Я вижу, вы редактировали вопрос. В частности, я отмечаю следующее:

Line Number: 54 // $withEmptyTitle = $row->eventTitle;  

Я отмечаю, что // .... означает ли это, что строка закомментирована? Получили ли вы копию на сервере, который закомментировал эту строку? Это, безусловно, объясняет тот факт, чтовы получаете предупреждения!

...