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

Тема в разделе "PHP", создана пользователем xlandserx, 22 мар 2011.

Модераторы: latteo
  1. xlandserx

    xlandserx Создатель

    Регистр.:
    17 ноя 2009
    Сообщения:
    49
    Симпатии:
    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");
    }
    
    Надеюсь на помощь
     
  2. bat

    bat

    Регистр.:
    24 сен 2009
    Сообщения:
    974
    Симпатии:
    276
    во втором варианте символы двоятся...
    "objj", "==", "resultt"
    это норально? )))
     
  3. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    А можно кусок где объявляется переменная $DBD?
     
  4. bat

    bat

    Регистр.:
    24 сен 2009
    Сообщения:
    974
    Симпатии:
    276
    Типа того чето... там еще со скобками путаница была, кстати.
    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");
    }
     
    xlandserx нравится это.
  5. xlandserx

    xlandserx Создатель

    Регистр.:
    17 ноя 2009
    Сообщения:
    49
    Симпатии:
    2
    Код:
    function run_cron_jobs()
    {
    	global $DB, $LANG, $PREFS, $TEMPLATE, $SESSION, $DBD;
    
    Добавлено через 57 секунд
    Символы двоятся т.к. в цикле внутри цикла выполняется другой запрос, мне показалось что так и должно быть.

    Добавлено через 1 минуту

    Где именно со скобками?
     
  6. bat

    bat

    Регистр.:
    24 сен 2009
    Сообщения:
    974
    Симпатии:
    276
    не должно.
    в моем варианте это уже исправлено.
    у тебя было так (выделил красным:(
    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++ хотя бы.. он вроде цветами разными выделяет все более-менее.
     
  7. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    xlandserx, ты не понял. Откуда она вообще берется? То что в глобал прописано это ясно. Да и лог не мешало бы показать...
     
  8. xlandserx

    xlandserx Создатель

    Регистр.:
    17 ноя 2009
    Сообщения:
    49
    Симпатии:
    2
    объясни пожалуйста, почему после открытия второго while ты решил закрыть первый?

    Добавлено через 28 минут
    В каком смысле "откуда она берётся"?)
    Учитывая, что я совсем нуб - то может я не в курсе, что эти глобальные переменные нужно ещё где-то описывать кроме как в начале функции?
    Вот например переменная $DB - постоянно используется в этой cms для запросов к базе данных. Я не в курсе - задавались ли ей для этого какие-то характеристики что ли...
     
  9. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
    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))
    и радуйтесь жизни...
     
    xlandserx нравится это.
  10. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Жестко помог, ничего не скажешь :) Разрулил, блин :ay:
     
    xlandserx нравится это.