2013-08-01 9 views
0

이 응용 프로그램의 목표는 특정보기에서 링크를 클릭하여 다른보기에서 데이터를 가져올 수있게하는 것입니다. 첫 번째보기는 잘 작동하며 올바른 PK도 얻게됩니다. 링크를 클릭하면 문제가 발생합니다.CodeIgniter/PHP 오류 메시지

<?php 
    echo "<h2>View</h2>"; 
    foreach ($rows as $r){ 
     echo '<br /><h3>'; echo $r->tHandle; echo'</h3>'; 
     echo "<li>Sent at: "; echo $r->content; echo"</li><br />"; 
     echo'<li>Created: '; echo $r->created; echo'</li><br />'; 
    } 
?> 

이것은 DB 쿼리가 진행되는 모델 및 기능입니다 :이보기에서 :는 'foreach는 대한 공급 잘못된 인수() 메시지'를 얻기

<?php 
class Tweets_model extends CI_Model{ 

    public function __construct() { 

     $this->load->database(); 

    } 

    public function getTweetDetails($id){ 
    $this->db->select('*')->from('tweets')->where('tweetId', $id); 
    $q = $this->db->get(); 
     if($q->num_rows > 0){ 

      foreach($q->result() as $row){ 

       $data[]=$row; 

      } 
      return $data; 

     } 

    } 
} 
?> 

컨트롤러 :

<?php 

class Tweets extends CI_Controller{ 

    public function __construct() { 
     parent::__construct(); 
     $this->load->model('tweets_model'); 
    } 

    public function details(){ 

     $data['rows'] = $this->tweets_model->getTweetDetails($this->uri->segment(2)); 
     $this->load->view('header'); 
     $this->load->view('tweet_details', $data); 
     $this->load->view('footer'); 
    } 
} 

? 

>

누군가 내 오류 메시지를 통과하도록 도와 줄 수 있습니까?

감사합니다.

+0

가'인 print_r ($ 행)의 결과가 무엇입니까; '전에에게'foreach'? –

+0

결과가 표시되지 않습니다. – user2642958

+0

http://stackoverflow.com/questions/2630013/invalid-argument-supplied-for-foreach –

답변

0

당신은 여기에 몇 가지 문제 해결을 할 필요가있다. 데이터베이스가 데이터를 반환하지 않기 때문에 모든 오류가 발생합니다.

  1. tweetId이 부분이 실제로 있는지 확인, 세그먼트는 기본 URL이 example.com 다음 세그먼트 2는 2 존재와 example.com/tweet/2 같은 될 것이라고 있도록 BASE_URL 후 카운트 시작 오른쪽 세그먼트.

  2. 는 알고 tweetId 합격이 라인의 모델에 존재 :

    $ 데이터 [ '행'] = $ this-> tweets_model-> getTweetDetails (> uri-> 세그먼트 $ this- (2));

그래서 같은 :

$data['rows'] = $this->tweets_model->getTweetDetails(1); 
+0

맞음 - 변경 : $ data [ 'rows'] = $ this-> tweets_model-> getTweetDetails ($ this-> uri-> segment (3)); 그리고 효과가 있습니다! 감사!! – user2642958

+0

lol 걱정하지 않아도, uri 세그먼트는 거의 항상 이와 같은 문제가 있습니다. –

+0

나는 PHP와 CI에 새로운 브랜드이므로 초보자 실수를하고있다. 다시 한번 감사드립니다. – user2642958

1

이 시도 :

보기 :

<?php 
    echo "<h2>View</h2>"; 
    foreach ($rows as $r){ 
     echo '<br /><h3>'; echo $r['tHandle']; echo'</h3>'; // EDIT THIS LINE 
     echo "<li>Sent at: "; echo $r['content']; echo"</li><br />"; 
     echo'<li>Created: '; echo $r['created']; echo'</li><br />'; 
    } 
?> 

모델 :

<?php 
class Tweets_model extends CI_Model{ 

    public function __construct() { 

     $this->load->database(); 

    } 

    public function getTweetDetails($id){ 
    $this->db->select('*') 
    $this->db->from('tweets') 
    $this->db->where('tweetId', $id); 
    return $this->db->get()->result_array(); 

    } 
} 
?> 

CONTROLLER :

<?php 

class Tweets extends CI_Controller{ 

    public function __construct() { 
     parent::__construct(); 
     $this->load->model('tweets_model'); 
    } 

    public function details(){ 

     $data['rows'] = $this->tweets_model->getTweetDetails($this->uri->segment(2)); 
     $this->load->view('header'); 
     $this->load->view('tweet_details', $data); 
     $this->load->view('footer'); 
    } 
} 

?> 

UPDATE :

세그먼트는 왼쪽에서 오른쪽으로 번호가 매겨집니다. 예를 들어, 전체 URL이있는 경우 :

http://example.com/index.php/news/local/metro/crime_is_up

세그먼트 번호는이 될 것이다 : 귀하의 경우 $this->uri->segment(2)

$this->uri->segment(1) // with return -> news 
$this->uri->segment(2) // with return -> local 
$this->uri->segment(3) // with return -> metro 
$this->uri->segment(4) // with return -> crime_is_up 

details를 반환합니다. 그리고 쿼리는 0 행을 반환합니다.

public function details(){ 
      $tweet_id = 1 // for example 
      $data['rows'] = $this->tweets_model->getTweetDetails($tweet_id); 
      $this->load->view('header'); 
      $this->load->view('tweet_details', $data); 
      $this->load->view('footer'); 
     } 

을 또는 당신은 예를 들어, URL에서이를 수행 할 수 있습니다 : 그냥 테스트를 위해, 당신은 다음과 같이 할 수

public function details($id){ // Here you will have the $tweet_id 

       $data['rows'] = $this->tweets_model->getTweetDetails($this->uri->segment(3)); 
       $this->load->view('header'); 
       $this->load->view('tweet_details', $data); 
       $this->load->view('footer'); 
      } 
+0

오류 메시지가 사라졌지만 결과 대신 브라우저에서 'Array()'가 표시됩니다. – user2642958

+0

@ user2642958, 다시보기를 확인하십시오 ... 제발 하나 편집하고 결과를 말해주십시오 –

+0

보기 수정 - 오류 메시지는 표시되지 않지만 결과도 표시되지 않습니다. – user2642958