为什么我得到这个未定义的索引错误?

时间:2013-05-23 09:05:06

标签: codeigniter php

我正在尝试列出数组的索引,并且它一直在我面前抛出错误。

我收到此错误:

  

遇到PHP错误   严重性:通知
  消息:未定义索引:发件人

现在提供一些代码详细信息: 我的打印行:

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

我的控制器:(使用phil sturgeon的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;
}

我的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] =&gt; object(stdClass)#42(10){[“id”] =&gt; string(1)“1”   [ “发件人”] =&GT; string(7)“Kenneth”[“email”] =&gt;串(17)   “zungate@gmail.com”[“date”] =&gt; string(10)“23/05/2013”​​[“time”] =&gt;   string(5)“18:00”[“人员”] =&gt; string(1)“4”[“phone”] =&gt;串(8)   “30243681”[“message”] =&gt; string(12)“Ja nemlig ja”[“time_received”] =&gt;   string(19)“0000-00-00 00:00:00”[“确认”] =&gt; string(1)“0”}}

发件人索引显然在那里,并且数组显然已正确加载。 (所有索引都会抛出错误,而不仅仅是发件人)。

发生了什么事,我错过了什么?是的,我知道我应该检查issetempty,但它存在,如果索引不存在则无法加载页面,因此检查有点没有用。

1 个答案:

答案 0 :(得分:1)

您在数组中有一个对象(请参阅var_dump),因此要获取预订发件人,您必须使用以下内容:

$reservation[0]->sender

或者更好的是,不应该从函数返回整个结果集,而应该只返回一行(假设id是唯一的,你的查询总是只返回一行):

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