2013-05-23 2 views
1

Я пытаюсь перечислить индексы массива, и он продолжает бросать ошибки на моем лице.Почему я получаю эту неопределенную ошибку индекса?

Я получаю эту ошибку:

A PHP Error was encountered
Severity: Notice
Message: Undefined index: sender

Теперь некоторые детали кода: Моя печать линия:

<div class="left"><label>Afsender: </label><p><?=$reservation['sender'] . ' (' .  $reservation['email'] . ')'?></p></div></pre> 

Мой контроллер: (шаблон библиотеки с использованием ФИЛ осетровая для CodeIgniter)

public function readReservation($id) 
{ 
    $data['reservation'] = $this->reservation_model->getReservation($id); 
    $this->template->build('admin/readReservation_view', $data); 
} 

Моя модель:

public function getReservation($id) 
{ 
    $query = $this->db->where('id', $id)->get('ita_reservations'); 

    if ($query->num_rows > 0) 
    { 
     return $query->result(); 
    } 
    else 
     return false; 
} 

My SQL:

CREATE TABLE IF NOT EXISTS `ita_reservations` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `sender` varchar(200) NOT NULL, 
    `email` varchar(200) NOT NULL, 
    `date` varchar(200) NOT NULL, 
    `time` varchar(200) NOT NULL, 
    `persons` varchar(200) NOT NULL, 
    `phone` varchar(200) NOT NULL, 
    `message` varchar(1000) NOT NULL, 
    `time_received` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `confirmed` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

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

array(1) { [0]=> object(stdClass)#42 (10) { ["id"]=> string(1) "1" ["sender"]=> string(7) "Kenneth" ["email"]=> string(17) "[email protected]" ["date"]=> string(10) "23/05/2013" ["time"]=> string(5) "18:00" ["persons"]=> string(1) "4" ["phone"]=> string(8) "30243681" ["message"]=> string(12) "Ja nemlig ja" ["time_received"]=> string(19) "0000-00-00 00:00:00" ["confirmed"]=> string(1) "0" } }

индекс отправителя явно есть, и массив явно загружен правильно. (Все индексы вызывают ошибки, а не только отправителя).

Что происходит, и что мне не хватает? Да, я знаю, что я должен проверить на isset или empty, но он существует, и страница не может быть загружена, если индекс не существует, поэтому проверки являются добросердечными.

+1

'$ reservation [0] -> sender;' – itachi

ответ

1

У вас есть объект внутри массива (смотрите var_dump), поэтому, чтобы получить отправителя заказа, вы должны использовать следующее:

$reservation[0]->sender 

Или еще лучше, вместо того, чтобы вернуться весь результирующий набор из вашего функция, вы должны возвращать только одну строку (предполагается, что идентификаторы уникальны, ваш запрос будет возвращать только одну строку в любом случае):

public function getReservation($id) 
{ 
    $query = $this->db->where('id', $id)->get('ita_reservations'); 

    if ($query->num_rows > 0) 
    { 
    return $query->row(); 
    } 
    else 
    return false; 
} 

При этом вы можете использовать:

$reservation->sender 
+0

Как странно, это исправлено. Но это не объясняет, почему тот же самый код (в значительной степени) работает в другой части моей системы. И что var_dump выглядит точно так же, только с меньшим количеством элементов. –

+1

@KennethLindbergChristensen: Остальная часть (где то, что вы описываете, работает) использует цикл, случайно? в этом случае он объясняет все. –

+0

@KennethLindbergChristensen Нет, он НЕ МОЖЕТ работать, если все коды одинаковы, а переменные разные. В будущем, выполнив var dump, используйте тег 'pre'. будет сэкономить много головной боли при отладке. – itachi

Смежные вопросы