2017-08-25 44 views
0

我的控制器出现错误。我正在尝试使用来自模型函数的结果来调用模型中的另一个函数。我正在使用Codeigniter框架。希望你能帮助我。由于如何在控制器中使用模型函数结果

控制器:

function photographer_campaign_details(){ 

     $camp_id = $this->uri->segment(4); 
     $data['page_title'] = 'Photographer Campaign Details'; 
     $adminId = $this->session->userdata('adminid'); 
     $campaign = $this->Admin_model->get_all_photographer_campaign_details($camp_id); 

     $data['seller'] = $this->Admin_model->get_seller_name_by_id($campaign['uid']);//error is here: Undefined index: uid 
     $data['campaign'] = $campaign; 
     $this->load->view('admin/photographer_campaign_details',$data); 

} 

我的模型:

function get_all_photographer_campaign_details($camp_id) { 
     $this->db->select('*'); 
     $this->db->where('campaign_id',$camp_id); 
     $query = $this->db->get('ps_campaigns'); 
     if ($query->num_rows() > 0) { 
      foreach ($query->result_array() as $row) { 
       $data[] = $row; 
      } 
      return $data; 
     } 
     return array(); 
    } 
    //get seller name by id 
    function get_seller_name_by_id($uid) 
    { 
     $this->db->select('firstname, lastname'); 
     $this->db->where('id', $uid); 
     $query = $this->db->get('ps_users'); 
     //return $query->row(); 
     return $query->result_array(); 

    } 

的错误来自控制器的:未定义指数:UID

回答

1

看着你get_all_photographer_campaign_details,如果没有行被发现那么你返回一个空数组。

在您的控制器中,您从不检查是否找到有效条目。因此,如果在不对应条目的URL中引用了标识,则会得到您的undefined index: uid,因为$campaign为空,且没有uid键。尝试是这样的:

function photographer_campaign_details(){ 

     $camp_id = $this->uri->segment(4); 
     $data['page_title'] = 'Photographer Campaign Details'; 
     $adminId = $this->session->userdata('adminid'); 
     $campaign = $this->Admin_model->get_all_photographer_campaign_details($camp_id); 
     if (!$campaign){ 
      show_404(); 
     } 

     $data['seller'] = $this->Admin_model->get_seller_name_by_id($campaign['uid']);//error is here: Undefined index: uid 
     $data['campaign'] = $campaign; 
     $this->load->view('admin/photographer_campaign_details',$data); 

} 

此外,您正在返回的数据错了,你找到数据的事件。即此位get_all_photographer_campaign_details

 foreach ($query->result_array() as $row) { 
      $data[] = $row; 
     } 

应该是这样的:

 foreach ($query->result_array() as $row) { 
      $data = $row; 
      break; 
     } 

的问题是要附加行作为一个行$data,但你的控制器期望得到的实际数据本身。即控制器期待这样的:

[ 
    'campaignid' => 1, 
    'uid' => 'ijerjeire' 
] 

但你要返回此:

[ 
    [ 
     'campaignid' => 1, 
     'uid' => 'ijerjeire' 
    ] 
] 

注意额外的阵列,一切都缠。基本上,当你的控制器只是期待结果时,你的模型返回一组结果。如果以前只有一次广告系列返回,我的上述建议才有效。如果情况并非如此,那么您需要调整控制器而不是模型方法。

重申我的另一点:确保并验证来自URL的用户输入。否则,你将返回PHP错误,而不是404的。

+0

我正确地获取了所有活动的详细信息,我只想做另一个查询来获取名称并显示它而不是uid。 –

+0

您为什么认为自己正确地获取了所有广告系列的详细信息?你的错误清楚地表明'$ campaign'变量中的'uid'键不存在。最有可能的原因是因为没有找到记录。无论如何,这绝对会发生,因为ID是从URL进入的,因此是用户输入,而您没有验证。用户可以将自己想要的任何数字(或非数字)放入URL中,在这种情况下,您的查询将找不到任何广告系列,并且会发生此错误。你必须验证你的输入。 –

+0

我只对一个广告系列进行测试,并且我的所有视图都显示了正确的值。但我试图显示文字而不是用户ID。我只想知道,如果我在我的第一个模型函数(get_all_photographer_campaign_details)中使用$ query-> result_array(),我如何才能访问$ campaign中的uid?谢谢 –

相关问题