Постраничный вывод данных из БД

Тема в разделе "Веб-технологии", создана пользователем ☆★☆БАТЯ☆★☆™, 4 июл 2013.

  1. ☆★☆БАТЯ☆★☆™

    ☆★☆БАТЯ☆★☆™

    Сообщения:
    2.585
    Симпатии:
    1.341
    Ковыряю вебморду статистики RankMe, не могу сообразить, как сделать постраничный вывод данных из БД, количество записей растет и страницу статистики долго прокручивать. Хочу сделать вывод 30 строк на страницу.
    Вот код:

    <?php
    global $bd_table;
    $query1 = "SELECT * FROM `$bd_table` ORDER BY score DESC";
    $resultado1 = mysql_query($query1,$conexao);

    $query = "SELECT COUNT(*) FROM `rankme`";
    $res = mysql_query($query);
    $count_records = mysql_fetch_row($res);
    $count_records = $count_records[0];

    $num_pages = ceil($count_records / $on_page);


    $current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;


    if ($current_page < 1)
    {
    $current_page = 1;
    }

    elseif ($current_page > $num_pages)
    {
    $current_page = $num_pages;
    }


    $start_from = ($current_page - 1) * $on_page;


    function universal_link_bar($page, $count, $pages_count, $show_link)

    {


    if ($pages_count == 1) return false;

    $sperator = ' | ';



    $style = 'style="color: red; text-decoration: none; text-shadow: 1px 1px 3px yellow, 0 0 1em yellow;"';

    $begin = $page - intval($show_link / 2);

    unset($show_dots);



    if ($pages_count <= $show_link + 1) $show_dots = 'no';


    if (($begin > 2) && !isset($show_dots) && ($pages_count - $show_link > 2)) {

    echo '<a '.$style.' href='.$_SERVER['php_self'].'?page=1> первая </a> ';

    }



    for ($j = 0; $j < $page; $j++) {


    if (($begin + $show_link - $j > $pages_count) && ($pages_count-$show_link + $j > 0)) {

    $page_link = $pages_count - $show_link + $j;



    if (!isset($show_dots) && ($pages_count-$show_link > 1)) {

    echo ' <a '.$style.' href='.$_SERVER['php_self'].'?page='.($page_link - 1).'><b>...</b></a> ';


    $show_dots = "no";

    }



    echo ' <a '.$style.' href='.$_SERVER['php_self'].'?page='.$page_link.'>'.$page_link.'</a> '.$sperator;

    } else continue;

    }

    for ($j = 0; $j <= $show_link; $j++)

    {

    $i = $begin + $j;



    if ($i < 1) {

    $show_link++;

    continue;

    }



    if (!isset($show_dots) && $begin > 1) {

    echo ' <a '.$style.' href='.$_SERVER['php_self'].'?page='.($i-1).'><b>...</b></a> ';

    $show_dots = "no";

    }


    if ($i > $pages_count) break;

    if ($i == $page) {

    echo ' <a '.$style.' ><b>'.$i.'</b></a> ';

    } else {

    echo ' <a '.$style.' href='.$_SERVER['php_self'].'?page='.$i.'>'.$i.'</a> ';

    }



    if (($i != $pages_count) && ($j != $show_link)) echo $sperator;


    if (($j == $show_link) && ($i < $pages_count)) {

    echo ' <a '.$style.' href='.$_SERVER['php_self'].'?page='.($i+1).'><b>...</b></a> ';

    }

    }


    if ($begin + $show_link + 1 < $pages_count) {

    echo ' <a '.$style.' href='.$_SERVER['php_self'].'?page='.$pages_count.'> последняя </a>';

    }

    return true;

    }



    mysql_connect('localhost', '5_rank', 'password') or die('error! Нет соединения с сервером mysql!');

    mysql_select_db('5_rank') or die('error! Нет соединения с базой данных!');



    $perpage = 30;

    if (empty($_GET['page']) || ($_GET['page'] <= 0)) {

    $page = 1;

    } else {

    $page = (int) $_GET['page'];

    }



    $count = mysql_numrows(mysql_query('select * from rankme')) or die('error! Записей не найдено!');

    $pages_count = ceil($count / $perpage);



    if ($page > $pages_count) $page = $pages_count;

    $start_pos = ($page - 1) * $perpage;




    universal_link_bar($page, $count, $pages_count, 30);




    echo '<p><b></b></p>';

    $result = mysql_query('select * from rankme limit '.$start_pos.', '.$perpage) or die('error!');

    while ($row = mysql_fetch_array($result)) {

    echo '<p>'.$row['some_field'].'</p>';

    }

    ?>

    Нумерация страниц появилась, вроде листается, но список игроков не разбивается постранично, так же все на одной странице.
    В чем промах?
     
  2. TF Studio

    TF Studio

    Сообщения:
    228
    Симпатии:
    209
    В этом направлении думать.
    Код не проверял, изложил логику.
    А для красоты можно заюзать
    jQuery.ajax
    Чтобы данные подгружались по мере необходимости (как в твиттере)