Помогите определить где ошибка в участке кода

xlandserx

Создатель
Регистрация
17 Ноя 2009
Сообщения
48
Реакции
2
Значит изначально в скрипте был вот такой участок кода, и он работает:
Код:
$time_to = time();
$result = $DB->query("SELECT * FROM " . DB_PREFIX . "members WHERE expirationdate>0 AND expirationdate<$time_to");
while ($obj = $DB->fetch_object($result))
{
$results[] = $obj->username;
$DB->query("UPDATE " . DB_PREFIX . "members SET group_id=".$PREFS->conf['regular_member_group'].", expirationdate=0 WHERE member_id=".$obj->member_id." LIMIT 1");
}
Я его несколько хотел изменить, чтобы $PREFS->conf['regular_member_group'] зависило от свойств профиля. Я в начале файла добавил в глобальные переменные $DBD. ($DB и $PREFS - используется везде в этой cms).
Вот отредактированный участок кода, выдаёт ошибку 500.
Код:
$time_to = time();
$result = $DB->query("SELECT * FROM " . DB_PREFIX . "members WHERE expirationdate>0 AND expirationdate<$time_to");
while ($obj = $DB->fetch_object($result))
{
$results[] = $obj->username;
$memberidtochose = $obj->member_id;
$resultt = $DBD->query("SELECT * FROM " . DB_PREFIX . "members_data_members WHERE data_id=$memberidtochose");
while ($objj = $DBD->fetch_object($resultt))
{
	$accounttype = $objj->data_accounttype;
	if ( $accounttype == 1 ) { // WE
	$PREFS->conf['regular_member_group'] = 2;
	}
	elseif ( $accounttype == 2 ) { // YO
	$PREFS->conf['regular_member_group'] = 7;
	}
}
$DB->query("UPDATE " . DB_PREFIX . "members SET group_id=".$PREFS->conf['regular_member_group'].", expirationdate=0 WHERE member_id=".$obj->member_id." LIMIT 1");
}
Надеюсь на помощь
 
во втором варианте символы двоятся...
"objj", "==", "resultt"
это норально? )))
 
А можно кусок где объявляется переменная $DBD?
 
Типа того чето... там еще со скобками путаница была, кстати.
HTML:
$time_to = time();
$result = $DB->query("SELECT * FROM " . DB_PREFIX . "members WHERE expirationdate>0 AND expirationdate<$time_to");
while ($obj = $DB->fetch_object($result))
{
$results[] = $obj->username;
$memberidtochose = $obj->member_id;
$result = $DBD->query("SELECT * FROM " . DB_PREFIX . "members_data_members WHERE data_id=$memberidtochose");
while ($obj = $DBD->fetch_object($result))
}
	$accounttype = $obj->data_accounttype;
	if ( $accounttype = 1 ) { // WE
	$PREFS->conf['regular_member_group'] = 2;
	}
	elseif ( $accounttype = 2 ) { // YO
	$PREFS->conf['regular_member_group'] = 7;
	}
{
$DB->query("UPDATE " . DB_PREFIX . "members SET group_id=".$PREFS->conf['regular_member_group'].", expirationdate=0 WHERE member_id=".$obj->member_id." LIMIT 1");
}
 
А можно кусок где объявляется переменная $DBD?

Код:
function run_cron_jobs()
{
	global $DB, $LANG, $PREFS, $TEMPLATE, $SESSION, $DBD;

Добавлено через 57 секунд
во втором варианте символы двоятся...
"objj", "==", "resultt"
это норально? )))

Символы двоятся т.к. в цикле внутри цикла выполняется другой запрос, мне показалось что так и должно быть.

Добавлено через 1 минуту
Типа того чето... там еще со скобками путаница была, кстати.
HTML:
$time_to = time();
$result = $DB->query("SELECT * FROM " . DB_PREFIX . "members WHERE expirationdate>0 AND expirationdate<$time_to");
while ($obj = $DB->fetch_object($result))
{
$results[] = $obj->username;
$memberidtochose = $obj->member_id;
$result = $DBD->query("SELECT * FROM " . DB_PREFIX . "members_data_members WHERE data_id=$memberidtochose");
while ($obj = $DBD->fetch_object($result))
}
	$accounttype = $obj->data_accounttype;
	if ( $accounttype = 1 ) { // WE
	$PREFS->conf['regular_member_group'] = 2;
	}
	elseif ( $accounttype = 2 ) { // YO
	$PREFS->conf['regular_member_group'] = 7;
	}
{
$DB->query("UPDATE " . DB_PREFIX . "members SET group_id=".$PREFS->conf['regular_member_group'].", expirationdate=0 WHERE member_id=".$obj->member_id." LIMIT 1");
}


Где именно со скобками?
 
Символы двоятся т.к. в цикле внутри цикла выполняется другой запрос, мне показалось что так и должно быть.
не должно.
Где именно со скобками?
в моем варианте это уже исправлено.
у тебя было так (выделил красным:(
HTML:
$time_to = time();
$result = $DB->query("SELECT * FROM " . DB_PREFIX . "members WHERE expirationdate>0 AND expirationdate<$time_to");
while ($obj = $DB->fetch_object($result))
{
$results[] = $obj->username;
$memberidtochose = $obj->member_id;
$resultt = $DBD->query("SELECT * FROM " . DB_PREFIX . "members_data_members WHERE data_id=$memberidtochose");
while ($objj = $DBD->fetch_object($resultt))
{
$accounttype = $objj->data_accounttype;
if ( $accounttype == 1 ) { // WE
$PREFS->conf['regular_member_group'] = 2;
}
elseif ( $accounttype == 2 ) { // YO
$PREFS->conf['regular_member_group'] = 7;
}
}
$DB->query("UPDATE " . DB_PREFIX . "members SET group_id=".$PREFS->conf['regular_member_group'].", expirationdate=0 WHERE member_id=".$obj->member_id." LIMIT 1");
}

Внимательней нужно смотреть. Если сам не замечаешь то поставь Notepad++ хотя бы.. он вроде цветами разными выделяет все более-менее.
 
xlandserx, ты не понял. Откуда она вообще берется? То что в глобал прописано это ясно. Да и лог не мешало бы показать...
 
не должно.
в моем варианте это уже исправлено.

объясни пожалуйста, почему после открытия второго while ты решил закрыть первый?

Добавлено через 28 минут
xlandserx, ты не понял. Откуда она вообще берется? То что в глобал прописано это ясно. Да и лог не мешало бы показать...

В каком смысле "откуда она берётся"?)
Учитывая, что я совсем нуб - то может я не в курсе, что эти глобальные переменные нужно ещё где-то описывать кроме как в начале функции?
Вот например переменная $DB - постоянно используется в этой cms для запросов к базе данных. Я не в курсе - задавались ли ей для этого какие-то характеристики что ли...
 
xlandserx, ваш код верный, просто уберите из объявления глобальных добавленную вами $DBD и строки
PHP:
$resultt = $DBD->query("SELECT * FROM " . DB_PREFIX . "members_data_members WHERE data_id=$memberidtochose");
while ($objj = $DBD->fetch_object($resultt))
приведите к виду
PHP:
$resultt = $DB->query("SELECT * FROM " . DB_PREFIX . "members_data_members WHERE data_id=$memberidtochose");
while ($objj = $DB->fetch_object($resultt))
и радуйтесь жизни...
 
Типа того чето... там еще со скобками путаница была, кстати.
$time_to = time();
$result = $DB->query("SELECT * FROM " . DB_PREFIX . "members WHERE expirationdate>0 AND expirationdate<$time_to");
while ($obj = $DB->fetch_object($result))
{
$results[] = $obj->username;
$memberidtochose = $obj->member_id;
$result = $DBD->query("SELECT * FROM " . DB_PREFIX . "members_data_members WHERE data_id=$memberidtochose");
while ($obj = $DBD->fetch_object($result))
}
$accounttype = $obj->data_accounttype;
if ( $accounttype = 1 ) { // WE
$PREFS->conf['regular_member_group'] = 2;
}
elseif ( $accounttype = 2 ) { // YO
$PREFS->conf['regular_member_group'] = 7;
}
{
$DB->query("UPDATE " . DB_PREFIX . "members SET group_id=".$PREFS->conf['regular_member_group'].", expirationdate=0 WHERE member_id=".$obj->member_id." LIMIT 1");
}
Жестко помог, ничего не скажешь :) Разрулил, блин :ay:
 
Назад
Сверху