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

Сообщения
2,587
Реакции
1,344
Ковыряю вебморду статистики 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>';

}

?>

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

TF Studio

Участник
Сообщения
227
Реакции
207
$per_page= 30;
$start = intval($_GET['page']) * $per_page;
$query1 = "SELECT * FROM `$bd_table` ORDER BY score DESC LIMIT $start, $per_page";
В этом направлении думать.
Код не проверял, изложил логику.
А для красоты можно заюзать
jQuery.ajax
Чтобы данные подгружались по мере необходимости (как в твиттере)
 
Сверху Снизу