Условие для цикла do-while

Тема в разделе "PHP", создана пользователем Samagonische, 21 окт 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Samagonische

    Samagonische Создатель

    Регистр.:
    16 июл 2007
    Сообщения:
    28
    Симпатии:
    16
    Здравствуйте.
    Уважаемые знатоки, прошу помощи.
    Есть таблица вида:
    __________________
    ID | Name | Group |
    ------------------|
    1 |Alternative | Alternative |
    2 |Crossover | Alternative |
    3 |Disco-Punk | Alternative |
    4 |Electro-Punk | Alternative |
    5 |EMO | Alternative |
    8 |Field Rec. | Avant-garde |
    9 |Improve | Avant-garde |
    10|Musique Con. | Avant-garde |
    11|Spoken Word | Avant-garde |
    12|Classic | Blues |
    13|Contemporary | Blues |
    14|Electric | Blues |
    15|Funk | Blues/R'N'B |
    16|Motown | Blues/R'N'B |
    17|New Jack | Blues/R'N'B |
    18|Piano Blues | Blues/R'N'B |
    19|Soul | Blues/R'N'B |
    ------------------------------
    Есть действие:
    PHP:
    <?php
    require_once( "config.php" );
    session_start( );
    require_once( 
    "functions.php" );
    $login $_SESSION['login'];
    $pass $_SESSION['pass'];
    $user getuserid$login$pass);
    $action = isset($_REQUEST['action']) ? strtolower$_REQUEST['action']) : "";                       
    if (
    getrights($action$user))
    {
        switch ( 
    $action )
        {
    case 
    "getgenres" :
      
    $wheres = array();
      if (
    getrights("show_hidden"$user))
       {
         
    $wheres[] = " music_albums.Hide=0 ";
        }
        
    $where count$wheres ) ? " WHERE ".implode" AND "$wheres ) : "";
         
    $_RESULT['genres'] = array( );
          
    $sql "SELECT music_genres.Group as Name, count(*) as Count FROM music_genres RIGHT JOIN music_albumgenres ON (music_genres.ID = music_albumgenres.GenreID) LEFT JOIN music_albums ON (music_albums.ID = music_albumgenres.AlbumID) ".$where." GROUP BY music_genres.Group ORDER BY Name";
                                
    $result mysql_query$sql );
                                do
                                {
                                    if ( !
    $result || ( $field mysql_fetch_assoc$result ) ) )
                                    {
                                        if ( 
    $field['Name'] )
                                        {
                                            
    $_RESULT['genres'][] = $field;
                                        }
                                    }
                                } while ( 
    );
      }
    }
                                else
     {
        
    $_RESULT['errors'][] = "Извините, ".$login.", у Вас недостаточно прав для совершения действия '{$action}' ";
     }
    При вызове действия "getgenres"
    Цикл проходит 4-е раза, как видно из таблицы(Alternative,Avant-garde,Blues,Blues/R'N'B) и зависает проблема в пост условии цикла do-while.
    Задача: остановить цикл логическим условием
    PHP:
    while ( ??? );
    Помогите пожалуйста.
     
  2. GrizliK

    GrizliK Создатель

    Регистр.:
    4 сен 2009
    Сообщения:
    47
    Симпатии:
    3
    Переделай цикл следующим образом:
    PHP:
    $result mysql_query$sql );
    while( 
    $field mysql_fetch_assoc$result ) ) 
    {
        if ( 
    $field['Name'] )
        {
          
    $_RESULT['genres'][] = $field;
        }
    }
    Если честно зачем в if условие !$result не знаю)))ведь если $result=0 то !$result=1 и мы с пустым результатом выборки входим в цикл:)
     
  3. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    733
    Симпатии:
    422
    это должно работать:
    PHP:
    <?php
    require_once( "config.php" );
    session_start( );
    require_once( 
    "functions.php" );

    $login $_SESSION['login'];
    $pass $_SESSION['pass'];
    $user getuserid$login$pass);
    $action = isset($_REQUEST['action']) ? strtolower$_REQUEST['action']) : "";                       

    if (
    getrights($action$user))
    {
     switch ( 
    $action )
      {
      case 
    "getgenres" :
        
    $wheres = array();
        if (
    getrights("show_hidden"$user))
        {
         
    $wheres[] = " music_albums.Hide=0 ";
        }
        
    $where count$wheres ) ? " WHERE ".implode" AND "$wheres ) : "";
        
        
    $_RESULT['genres'] = array();
        
        
    $result mysql_query("SELECT music_genres.Group as Name, count(*) as Count FROM music_genres RIGHT JOIN music_albumgenres ON (music_genres.ID = music_albumgenres.GenreID) LEFT JOIN music_albums ON (music_albums.ID = music_albumgenres.AlbumID) ".$where." GROUP BY music_genres.Group ORDER BY Name");
        if (
    $result)
         {
           while (
    $field mysql_fetch_assoc($result))
            {
             if ( 
    $field['Name'] ) { $_RESULT['genres'][] = $field; }
            }
         }
      }
    }
    else
     {
      
    $_RESULT['errors'][] = "Извините, ".$login.", у Вас недостаточно прав для совершения действия '{$action}' ";
     } 
    ?>
     
Статус темы:
Закрыта.