2013-06-30 76 views
0

以下代碼僅包含第一個文件。目前總共有2個文件將在未來更多。我將如何編碼以包含所有文件?爲什麼這不包括所有文件?

該代碼有效,但只包含1個文件,因此它不會按照預期的方式工作。

$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

除了文件不存在或數據庫中的值與文件不匹配之外,沒有理由應該包括它。 – DevZer0

+0

即時通訊不知道。嘗試回顯$ this-> root。 '/ modules /'。 $ row ['directory']確保路徑正確。另外,你爲什麼要檢查num!= 0,你的while循環已經處理了這個 – Kris

回答

0

看起來是akay。你是否檢查循環中的代碼是否迭代了兩次?

可能是因爲包含的第一個文件將$num的值設置爲0.如果發生這種情況,則循環將繼續,但包含模塊的代碼不再執行。無論如何,這個檢查是沒有必要的。如果查詢沒有返回行,那麼循環條件應該第一次計算爲false,因此if不會添加任何值。

另一個問題可能是文件名稱不匹配。也許存在拼寫錯誤,或者案例不匹配(Linux文件名區分大小寫!)。嘗試使用require而不是include。如果找不到模塊,它會失敗,所以如果是這樣的話,它會給你提供更好的信息。

+0

好吧,我已經刪除了if($ num!= 0),但仍然沒有運氣。我也檢查了數據庫和文件名和路徑,它們是正確的。它包含並正確執行數據庫中的第一項,但忽略第二項。如果我在數據庫中切換它們的id(結果按順序排列),那麼它將首先執行,然後忽略第二個。我希望我清楚,如果我不是,請原諒我。 – user2535554

相關問題