Зависание цикла while на условии if

snifer

Новичок
Зависание цикла while на условии if

Здравствуйте.
Помогите решить проблему.

есть скрипт, который никак не хочет работать.

Выскакивает с ошибкой:
Fatal error: Maximum execution time of 10 (Время изменял до 500!, то же самое) seconds exceeded in I:\home\test\www\common.php on line 97

вот строки кода:

PHP:
while ( $user = mysql_fetch_array( $result ) )
{
    $sqlQuery = "SELECT a.* FROM ".TIPS_TABLE." a, ".ACC_TIPS_TABLE." b WHERE a.id=b.tip_id AND group_id=".$user['group_id']." AND `access`=1";
    if ( !( $result2 = mysql_query( $sqlQuery ) ) )
    {
        exit( mysql_error( )."<br>".$sqlQuery );
    }
    do
    {
        if ( $tip = mysql_fetch_array( $result2 ) )
        {
            $sqlQuery = "SELECT * FROM ".TABLES_TABLE." WHERE id=".$tip['table_id'];
            if ( !( $result3 = mysql_query( $sqlQuery ) ) )
            {
                exit( mysql_error( )."<br>".$sqlQuery );
            }
            $row = mysql_fetch_array( $result3 );
            $crypt = $row['crypt'];
            $all_fields = sql_type_field( $tip['table_id'] );
            $shablons = array( "{текущий}", "{новая запись}", "{измененная запись}", "{пустая дата}", "'{текущая дата}'", "'{текущее время}'" );
            $replace = array( $user['id'], "u".$user['id']."=1", "u".$user['id']."=2", "0000-00-00 00:00:00", "concat(curdate(),' 00:00:00')", "now()" );
            $condition = str_replace( $shablons, $replace, $tip['condition'] );
            $sqlQuery = "SELECT * FROM ".DATA_TABLE.$tip['table_id']." WHERE status=0 AND ".$condition." AND r".$tip['id']."_u".$user['id']."<".time( );
            if ( !( $result3 = mysql_query( $sqlQuery ) ) )
            {
                exit( mysql_error( )."<br>".$sqlQuery );
            }
            do
            {
/*вот 97 строка*/                if ( $line = mysql_fetch_array( $result3 ) )
                {
                    $shab_fields = array( );
                    $value_fields = array( );
                    foreach ( $all_fields as $one_field )
                    {
                        $field_id = $one_field['id'];
                        $shab_fields[] = "{".$one_field['name_field']."}";
                        if ( $crypt && strval( $line["f".$field_id] ) !== "" )
                        {
                            $value = decrypt( $line["f".$field_id] );
                        }
                        else
                        {
                            $value = $line["f".$field_id];
                        }
                        $value_fields[] = form_display_type( $one_field, $value, $line['id'] );
                    }
                    $message = str_replace( $shab_fields, $value_fields, $tip['message'] );
                    if ( $tip['head_on'] && $user['id'] == $cur_user['id'] )
                    {
                        $one_tip['tip_id'] = $tip['id'];
                        $one_tip['table_id'] = $tip['table_id'];
                        $one_tip['line_id'] = $line['id'];
                        $one_tip['message'] = $message;
                        $user_tips[] = $one_tip;
                    }
                    if ( $tip['email_on'] && $line["r".$tip['id']."_u".$user['id']] == "0" )
                    {
                        sendmail( "Напоминание (".$config['app_name'].")", $message, $user['e_mail'] );
                        $sqlQuery = "UPDATE ".DATA_TABLE.$tip['table_id']." SET r".$tip['id']."_u".$user['id']."=1 WHERE id=".$line['id'];
                        if ( !mysql_query( $sqlQuery ) )
                        {
                            exit( mysql_error( )."<br>".$sqlQuery );
                        }
                    }
                }
            } while ( 1 );
        }
    } while ( 1 );
}
прошу помощи в решении данной проблемы.
Спасибо.
 

snifer

Новичок
если ставить while ( 0 ) то скрипт начинает работать, но строки, которые находятся в этом цикле, не будут выводить нужную информацию...

Может по другому как реализовать?
 

Фанат

oncle terrible
Команда форума
а можно поинтересоваться, откуда вообще взялась гениальная идея while ( цифра )?
 

snifer

Новичок
идея взялась от программиста, который ушел в армию...
 

Фанат

oncle terrible
Команда форума
Ох. На стенку повесить, и в рамочку.
Не. В бронзе отлить.
 

snifer

Новичок
Программиста? )))

как я понимаю (только учусь),

условие "while ( 1 )" заставляет повторяться цикл постоянно,
чем загоняет браузер в ступор...

может чем нибудь заменить "while ( 1 )"?
 

Фанат

oncle terrible
Команда форума
браузер здесь не при чем вообще
а в вйл надо писать условие выхода из цикла

вот только здесь весь код кривой, и один вайл погоды не сделает
 

snifer

Новичок
как быть?
Программёра того уже не выловишь в ближайший год...

может возьмешься исправить? я отблагодарю...

-~{}~ 05.01.10 03:10:

хм... поставил в 97 строке ";" и сделал while (0), и все заработало...
Только что-то меня смущает... что-то не так...
 
Сверху