2017-08-25 8 views
0

コントローラにエラーがあります。モデル関数の結果を使用して、モデル内の別の関数を呼び出そうとしています。私はCodeigniter Frameworkを使用しています。あなたが私を助けることを願っています。おかげでコントローラでモデル関数の結果を使用する方法

コントローラー:

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); 

} 

マイモデル:何行が見つからない場合は、お使いのget_all_photographer_campaign_detailsを見てみると、UID

答えて

1

:不定インデックス:

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(); 

    } 

エラーがコントローラから来ています空の配列を返します。

コントローラでは、有効なエントリが見つかったかどうかを確認することはありません。結果として、$campaignが空であり、uidキーを持たないため、エントリに対応しないURLでIDが参照されると、undefined index: 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でつまりこのビット:問題はあなたが$dataに1行として行を追加しているということですが、あなたのコントローラが実際のデータを取得するために期待している

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

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

は、次のようになります自体。私。

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

しかし、あなたはこれを返すされています:あなたのコントローラは、このことを期待している

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

はすべてが周りに包まれていること、余分な配列に注意してください。基本的には、コントローラが結果を期待しているだけで、モデルは結果の配列を返しています。私の上記の提案は、返されたキャンペーンが1つしかないと思われる場合には機能します。そうでない場合は、モデルメソッドではなくコントローラを調整する必要があります。

私のもう1つのポイントを繰り返してください。URLからのユーザー入力を確認し、確認してください。それ以外の場合は、404の代わりにPHPエラーを返します。

+0

すべてのキャンペーンの詳細が正しく表示されています。名前を取得してuidの代わりに表示する別のクエリを実行したいだけです。 –

+0

キャンペーンの詳細をすべて正しく取得していると思われるのはなぜですか?あなたのエラーは、 '$ campaign'変数の' uid'キーが存在しないことを明確に示しています。その理由はレコードが見つからなかったためです。とにかく、idがURLから来ているため、あなたが検証していないユーザー入力です。ユーザーは任意の数字(または数字ではない)をURLに入れることができます。その場合、クエリにキャンペーンが見つからず、このエラーが発生します。入力内容を検証する必要があります。 –

+0

1つのキャンペーンでのみテストを行っています。すべての値が正しく表示されています。私はユーザーIDの代わりにテキストを表示しようとしています。最初のモデル関数(get_all_photographer_campaign_details)で$ query-> result_array()を使用すると、$ campaignからどのようにuidにアクセスできますか?ありがとう –

関連する問題