2016-04-29 147 views
0

我創建了一個需要顯示一些信息的簡單函數。函數內的PHP函數

這些信息中的一部分來自數據庫。

但是,數據庫處理程序沒有這個功能內的認可,爲此,我得到以下錯誤:

注意:未定義的變量:DB在審查 \在線控制器\ edit_mails.php 82

致命錯誤:調用到截尾成員函數get_results()上的空中\上線路控制器\ edit_mails.php 82

我使用ezSQL數據庫處理程序

功能:

function MessageSelector() { 
$emails = $db->get_results("SELECT * FROM settings_emails WHERE cat = '$edit_type'"); 
if(empty($emails)) { 
//There are no messages to select 
     } 
else { 
     //Create an option for each message 
     foreach ($emails as $email): 
      echo "<option value=\"", $email->title , "\" onclick=\"location.href='edit_emails.php?x=", $edit_type , "&mail=",$email->id,"';\">", $email->title , "</option>"; 
     endforeach; 
     ";} 
} 

數據庫處理程序:

require_once ADMIN_DB_DIR . '/ez_sql_core.php'; 
require_once ADMIN_DB_DIR . '/ez_sql_mysql.php'; 
global $db; 
$db = new ezSQL_mysql($dbuser, $dbpassword, $dbname, $dbhost); 
+1

你可以通過'$ db'給你的函數或讓它在你的函數 – cmorrissey

+0

'功能MessageSelector($ DB)一個全局變量{...}' –

+0

謝謝我修好了 –

回答

1

通在$db作爲參數傳入你的函數爲它在範圍內使用的功能。

另外,在你的foreach中你有一些不可思議的地方。通常串聯並沒有忘記定義$edit_type

function MessageSelector($db) { 
    $emails = $db->get_results("SELECT * FROM settings_emails WHERE cat = '$edit_type'"); 
    if(empty($emails)) { 
      //There are no messages to select 
    } else { 
     //Create an option for each message 
     foreach ($emails as $email) { 
      echo "<option value=\"". $email->title . "\" onclick=\"location.href='edit_emails.php?x=". $edit_type . "&mail=" . $email->id . "';\">". $email->title . "</option>"; 
     } 
    } 
} 
+0

我加了: global $ db; global $ edit_type; 解決了問題 –

+0

@HiddeKat使用全局變量被認爲是「代碼異味」;或換句話說,這是一個強有力的指標,表明某件事情是嚴重錯誤如果我是你,我會*隨時隨地*通過你需要的東西,因爲你需要它。 Globals在大型應用程序中極難調試,並且可能會快速失控,從而造成維護噩夢。你希望你的代碼儘可能模塊化和鬆散耦合,每次都沒有例外,並且無論外部影響如何都能工作。考慮你自己的警告。 –