2012-04-18 2 views
0

다음 코드에서 두 개의 별도 foreach 루프가 실행됩니다. 결국 두 번째 foreach 루프가 끝나면 $ row-> websiteURL이 출력됩니다. 문제는 $ row-> websiteURL이 첫 번째 루프의 일부입니다. CodeIgniter는 다른 하나가 실행 된 후 foreach 루프를 계속합니다.

PHP는 오류가

심각도를 발생했습니다

:

메시지를 주목하라 : 내가 코드를 실행할 때 그래서 나는 다음과 같은 오류가 정의되지 않은 속성 : stdClass : $ websiteURL

파일 이름 : 뷰/projects.php

줄 번호 : _ 빈 135

"= 대상" ">

두 번째 foreach가 완료된 후 첫 번째 foreach 루프를 계속 진행하려면 어떻게해야합니까?

<table style="width: 41%"> 
<?php $query = $this->db->query("SELECT * FROM projects ORDER BY idprojects DESC"); 
     foreach ($query->result() as $row) { ?> 
    <tr> 
     <td style="height: 15px"> 
     <div class="auto-style2"> 
      <em><span class="auto-style1"><?=$row->projectName?></span></div> 
     <table cellpadding="5" style="width: 535px; height: 66;"> 
      <tr> 
       <td class="box1" style="height: 49px; width: 800px;"> 
     <table cellpadding="0" cellspacing="0" style="width: 466px; height: 185px"> 
      <!-- MSTableType="layout" --> 
      <tr> 
       <td valign="top" style="width: 225px"> 
      <em> 
     <table style="width: 100%"> 
      <tr class="box1"> 
       <td class="innerbox" style="height: 88px"><em><span class="text1">Project name</span>: 
       <span class="underlined-link"><?=$row->projectName?></span><br> 
       <span class="text1">Description</span>: <?=$row->projectDesc?><br><span class="text1">Start 
       date</span>: <?=$row->startDate?><br><span class="text1">Finised date</span>: 
       <?=$row->finishedDate?><br><span class="text1">Created for</span>: 
       <?=$row->createdFor?><br><span class="text1">Contributers</span>: 
       <span class="underlined-link"><?=$row->contributors?></span></em></td> 
      </tr> 
     </table> 
     </em></td> 
       <td style="width: 12px">&nbsp;</td> 
       <td valign="top" style="height: 185px; width: 229px"> 
      <em> 
<?php   $query = $this->db->query("SELECT * FROM screenshots ORDER BY idscreenshot DESC"); 
       foreach ($query->result() as $row) { ?> 
       <img alt="" src="<?=$row->screenshotURI?>" width="231" height="187"></em>&nbsp;</td> 
      </tr> 
<?php } ?> 
     </table> 
       <br> 
       <a style="text-decoration:none" href="<?=$row->websiteURL?>" target="_blank"><div class="link1"> 
        View This Product</div></a> 
       </td> 
      </tr> 
     </table> 
     </em></td> 
    </tr> 
<?php } ?> 
     </table> 
+0

우선,보기에서 왜 DB에 대한 쿼리를 수행하고 있습니까? 이 작업은 모델에서 수행해야합니다. 잠시만 기다려주세요. –

답변

1

은이 같은 두 번째 foreach 문에서 변수를 변경해야

$query = $this->db->query("SELECT * FROM screenshots ORDER BY idscreenshot DESC"); 
       foreach ($query->result() as $row2) { ?> 
       <img alt="" src="<?=$row2->screenshotURI?>" width="231" height="187"></em>&nbsp;</td> 

은 $ 행 변수는 여전히 범위 안에이며이를위한 첫 번째 쿼리에서 찾고 있습니다. 내부 foreach 루프를 수행하는 경우 foreter와 동일한 "item"변수의 이름을 지정할 수 없습니다. 지점

그래서 더 :

위로 더 큰 문제에
foreach($arr as $row): 
    foreach($arr as $row2): 
     //do something 
    endforeach; 
endforeach; 

. 뷰에서 데이터를 쿼리하면 안됩니다. 데이터는 모델에서 조작됩니다. 컨트롤러는 모델을로드하고 모델을 사용하여 정보를 얻은 다음 정보를보기로 전달합니다. MVC를 처음 사용하는지 파악하는 것은 어려운 개념 일 수 있습니다. 일단이 작업을하게되면 이러한 쿼리를 모델의 고유 함수로 이동하고 그런 식으로 정보를 검색하는 데 집중하십시오.

+0

나는 그것을 잊었다. 고마워. 그리고 저는 대개 내 물건을 컨트롤러에 넣습니다. 나는 모델을 망치지 않는다. 그것은 더 많은 시간이 걸리고 나는 일반적으로 시간 제약을 받는다. 그리고 대부분의 사람들은 여기에 내 데이터를 배치하여 뷰 내부의 뷰를 처리합니다. 그래서 방금 습관에 빠졌습니다. –

+1

개인적으로 나는 그 말을 듣지 않을 것입니다. 사이트의 크기가 적당 해지기 시작하면 데이터가 실제로 뷰에 있어야합니다. 많은 조회수가 있고 18 번 사용 된 하나의 조회를 변경해야 할 때 이제는 모델의 한 곳 대신 모든 곳에서 변경해야합니다. 그러나, 당신을 위해 일하는 무엇 이건, 롤. –

관련 문제