За последние 24 часа нас посетили 42583 программиста и 1814 роботов. Сейчас ищут 877 программистов ...

Код работает, но, по-моему, так не совсем красиво

Тема в разделе "Прочие вопросы по PHP", создана пользователем Ігор, 16 окт 2008.

  1. Ігор

    Ігор Активный пользователь

    С нами с:
    7 апр 2008
    Сообщения:
    195
    Симпатии:
    0
    Кусок кода работает без проблем, но по-моему, не совсем красиво выглядит, даже немного запутано.

    PHP:
    1. <?php
    2.  
    3.   $lim=4;
    4.   $query="SELECT albums.artist,
    5.                 albums.type,
    6.                 albums.album,
    7.                 albums.size,
    8.                 albums.id,
    9.                 albums.list,
    10.                 albums.clicks,
    11.                 types.type_name,
    12.                 types.user_visible,
    13.                 types.id
    14.           FROM  albums
    15.           LEFT JOIN types
    16.           ON (albums.type=types.id)
    17.           WHERE types.user_visible='true'";
    18.  
    19.  
    20.  if (isset($_GET['page'])){  # Отображаемая страница
    21.   $page=$_GET['page'];
    22.  }
    23.  else {
    24.    $page=0;
    25.  }
    26.  
    27.  function inc($ag){
    28.    $ag++;
    29.    return $ag;
    30.  }
    31.  
    32.  ######################################################################################
    33. #                                                                                    #
    34. #                       Смещение запроса базы данных                                  #
    35. #                                                                                    #
    36. ######################################################################################
    37. function getofs () {
    38.  
    39.   GLOBAL $c, $lim, $page, $pages, $page_count;
    40.  
    41.   $pages=sqlite_fetch_single($c);
    42.   $page_count=ceil($pages/$lim);
    43.  
    44.   if ($page<0) {
    45.     $page=0;
    46.   }
    47.   else {
    48.    if ($page>$page_count) {$page=$page_count-1;}
    49.   }
    50.   $ofs=$page*$lim;
    51.   return $ofs;
    52.  
    53.  
    54.  }
    55. #---------------------------------------------------------------------------
    56. #                       Если запрос на артиста
    57. #---------------------------------------------------------------------------
    58.  
    59.  if (!empty($_GET['artist'])) {
    60.  
    61.    $c=sqlite_query ($id, "SELECT COUNT(*) from albums
    62.                          LEFT JOIN types ON (albums.type=types.id)
    63.                          WHERE albums.artist='$artist'
    64.                          AND types.user_visible='true'");
    65.    $ofs=getofs();
    66.    $artist=$_GET['artist'];
    67.    $query=$query." AND albums.artist='$artist' LIMIT $lim OFFSET $ofs";
    68.    $post_title="<b>$artist</b>";
    69.    $qs="musik.htm?artist=".rawurlencode($artist);
    70.  }
    71.  
    72. #---------------------------------------------------------------------------
    73. #                       Если запрос на жанр
    74. #---------------------------------------------------------------------------
    75.  if (!empty($_GET['types'])) {
    76.  
    77.    $c=sqlite_query ($id, "SELECT COUNT(*) from albums
    78.                          LEFT JOIN types ON (albums.type=types.id)
    79.                          WHERE types.type_name='$types'
    80.                          AND types.user_visible='true'");
    81.    $ofs=getofs();
    82.    $type=$_GET['types'];
    83.    $query=$query." AND types.type_name='$types' LIMIT $lim OFFSET $ofs";
    84.    $post_title="<b>$types</b>";
    85.    $qs="musik.htm?types=".rawurlencode($types);
    86.  }
    87. #------------------------------------------------------------------------------
    88.  
    89.  
    90.  
    91.  if ($pages) {
    92. ............... Выводим содержимое
    93. for ($r=0; $r<$page_count; $r++) {
    94.   echo "<li><a href='$qs&page=$r'>".inc($r)."</a>&nbsp;&nbsp; \n</li> \n";  # ССылки на страницы
    95. }
    96.  
    97. } else { Ошибка, ресурс не найден }
    98.  
    99.  
    Меня смущает то, что оба запроса почти одинаковы,
    . Отсюда вопросы:
    Стоит ли вынесты его в функцию?
    Если да, то как это сделать?
     
  2. В конкретном этом случае скорее всего не стоит.

    Хотя, возможно стоит сделать функции getGenre() и getArtist() которые будут выбирать жанр и исполнителя, т.к. это у тебя наверное будет много где юзаться.
     
  3. evll

    evll Активный пользователь

    С нами с:
    3 май 2007
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Lithuania
    Код (Text):
    1.  
    2.   function inc($ag){
    3.    $ag++;
    4.    return $ag;
    5.   }
    Уберите этот ужас.
     
  4. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    PHP:
    1. <?php
    2. for ($r=0; $r<$page_count; $r++) {
    3.     echo "<li><a href='$qs&page=$r'>".inc($r)."</a>   \n</li> \n";  # ССылки на страницы
    4. }
    Меняем на
    PHP:
    1. <?php
    2. $r = 0;
    3. while($r < $page_count){
    4.     echo "<li><a href='$qs&page=$r'>".++$r."</a>   \n</li> \n";  # ССылки на страницы
    5. }
    И читаем про инкремент/декремент главу в мануале http://lv.php.net/manual/ru/language.op ... rement.php а так же главу про циклы и их виды:
    http://lv.php.net/manual/ru/control-str ... .while.php
    http://lv.php.net/manual/ru/control-str ... .while.php
    http://lv.php.net/manual/ru/control-structures.for.php
    http://lv.php.net/manual/ru/control-str ... oreach.php
     
  5. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    А если юзер ввел и жанр и артиста то что у тебя выведется?

    Имхо, стоит выделить запрос $query= [sql]
    SELECT COUNT(*) from albums
    LEFT JOIN types ON (albums.type=types.id)
    WHERE types.user_visible='true'[/sql]

    и в зависимости от того, что тебе пришло формировать добавку к WHERE и уже его приделывать к запросу.

    PHP:
    1.  
    2. $query.=!empty($_GET['artist'])?:"AND albums.artist='$artist'":"";
    3. $query.=!empty($_GET['types'])?:" AND types.type_name='$types'":"";
    4. $c=sqlite_query ($id, $query)
    5.  
    или даже сразу

    PHP:
    1.  
    2. <?php
    3.  $query = "SELECT COUNT(*) from albums
    4.    LEFT JOIN types ON (albums.type=types.id)
    5.    WHERE types.user_visible='true'". !empty($_GET['artist'])?:"AND albums.artist='$artist'":"" . !empty($_GET['types'])?:" AND types.type_name='$types'":"";