2013-06-30 3 views
0

아래 코드는 첫 번째 파일 만 포함합니다. 총 2 개의 파일이 현재 구매가 미래에 더 많을 것입니다. 모든 파일을 포함하도록 코드를 작성하려면 어떻게해야합니까?왜 모든 파일을 포함하지 않습니까?

코드는 작동하지만 단지 하나의 파일 만 포함하므로 의도 한대로 작동하지 않습니다.

$result = $this->db->query("SELECT directory FROM modules WHERE enabled = {es} ORDER BY id ASC", 'yes'); 
$num = $result->numberOfRows; 

while($row = $result->getArray()) 
{ 
    if($num != 0) 
    { 
    if(file_exists($this->root . '/modules/' . $row['directory'])) 
    { 
     include($this->root . '/modules/' . $row['directory'] . '/' . $row['directory'] . '.php'); 
    } 
    else 
    { 
     $this->db->query("DELETE FROM modules WHERE directory = {es}", $row['directory']); 
    } 
    } 
} 

편집 :가 나는 문제를 발견했다. 내가 포함하고 있던 파일들은 같은 변수 "$ result"와 "$ row"를 사용하여 SQL 쿼리를 가지고 있습니다. 그래서 파일을 포함하고 실행할 때 그들은 서로를 재설정하고있었습니다.

+0

파일이 존재하지 않거나 db의 값이 파일과 일치하지 않는 경우를 포함해야하는 이유가 없습니다. – DevZer0

+0

확실하지 않습니다. $ this-> root를 반향시켜보십시오. '/ modules /'. $ row [ 'directory'] 경로가 올바른지 확인하십시오. 또한 num! = 0, while 루프가 이미 그 핸들을 처리하고있는 이유는 무엇입니까? – Kris

답변

0

아케이. 루프의 코드가 두 번 반복되는지 확인 했습니까?

포함 된 첫 번째 파일은 $num의 값을 0으로 설정할 수 있습니다. 그런 경우 루프가 계속되지만 모듈을 포함하는 코드는 더 이상 실행되지 않습니다. 어쨌든,이 수표는 필요하지 않습니다. 쿼리가 행을 반환하지 않으면 루프 조건은 처음으로 false로 평가되어야하므로 if에는 값이 추가되지 않습니다.

또 다른 문제는 파일 이름 이름이 일치하지 않을 수 있다는 것입니다. 어쩌면 오타가 있거나 대소 문자가 일치하지 않을 수도 있습니다 (Linux 파일 이름은 대소 문자를 구분합니다!). include 대신 require을 사용해보십시오. 모듈을 찾을 수 없으면 실패합니다. 따라서 더 정확한 정보를 얻을 수 있습니다.

+0

그래, if ($ num! = 0)을 제거했지만 여전히 운이 없습니다. 또한 데이터베이스와 파일 이름 및 경로를 확인하고 올바른지 확인합니다. 데이터베이스의 첫 번째 항목에 대해 올바르게 포함되고 실행되지만 두 번째 항목은 무시됩니다. 데이터베이스에서 ID를 전환하면 (결과가 정렬 됨) 먼저 실행되는 것을 실행하고 두 번째를 무시합니다. 나는 분명히 있기를 바랍니다. 그렇지 않으면 나를 용서해주십시오. – user2535554

관련 문제