2016-04-29 3 views
0

Я создал простую функцию, которая должна отображать некоторую информацию.PHP-функция внутри функции

Часть этой информации поступает из базы данных.

Но, обработчик баз данных, не признается в этой функции, для этого, я получаю следующие ошибки:

Примечание: Undefined переменной: дб в цензуру \ контроллер \ 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; 
     ";} 
} 

Handler База данных:

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 ($ дб) {...} ' –

+0

спасибо, я исправил его –

ответ

1

Pass в $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

i добавил: global $ db; global $ edit_type; , который решил проблему –

+0

@HiddeKat Использование глобалов - это то, что считается «запахом кода»; или, другими словами, мощный индикатор того, что что-то серьезно неправильно. Если бы я был вами, я бы * всегда * передавал то, что вам нужно, поскольку вам это нужно. Глобалы чрезвычайно трудно отлаживать в большом приложении и могут быстро вырваться из-под контроля, создавая кошмар для обслуживания. Вы хотите, чтобы ваш код был как модульным, так и слабо связанным, насколько это возможно, каждый раз, без исключений и способным работать независимо от внешних воздействий. Считайте себя предупрежденным. –

Смежные вопросы