Вход
 
Главная Форум Каталог веб-мастеров Регистрация SEO библиотека
Разделы сайта
Поиск по сайту
Почта @admin-club.ru
Логин:
Пароль:
· завести почту
Новое
В картинках
см. так же графику
А так же
 
Постраничный вывод данных из MySQL 1 июля 2010
 - БД, PHP
Простой и универсальный метод постраничного вывода данных из mysql

Я приведу пример кода, в котором видно, как легко организовать постраничный вывод данных из mysql

index.php (главный файл):


<?php
//подключаем класс Paging
require('paging.inc.php');

//соединяемся с базой данных
$_DB = new mysqli($server,$db_user,$db_pass,$database);

//создаем экземпляр класса Paging
//в качестве параметра передаем ему указатель на соединение с MySQL
$_PAGING = new Paging($_DB);

//выполняем обычный запрос данных не заботясь
//о разбивке на страницы через метод get_page объекта класса Paging
$r = $_PAGING->get_page( "SELECT * FROM table" );

while($rows = $r->fetch_assoc())
{
//выводим данные
}

//выводим "Показано с 1 по 10 из 11"
echo $_PAGING->get_result_text().' новостей';

//выводим ссылки-ярлыки на предыдущую и следующую страницы
echo '<br />Страницы: '.$_PAGING->get_prev_page_link().' '.$_PAGING->get_next_page_link().' ';

//а также строку с номерами страниц (основные ярлыки)
echo $_PAGING->get_page_links();

?>


Тут мы видим подключение некого файла paging.inc.php, вот его листинг:


<?
class Paging {

private $page_size = 10;
private $link_padding = 10;
private $page_link_separator = ' ';
private $next_page_text = 'следующая >';
private $prev_page_text = '< предыдущая';
private $result_text_pattern = 'Показано с %s по %s из %s';
private $page_var = 'p';

private $db;
private $q;
private $total_rows;
private $total_pages;
private $cur_page;

public function __construct($db, $q='', $page_var='p')
{
    $this->db = $db;
    if ($q) $this->set_query($q);
    $this->page_var = $page_var;
    $this->cur_page = isset($_GET[$this->page_var]) && (int)$_GET[$this->page_var] > 0 ? (int)$_GET[$this->page_var] : 1;
}

public function set_query($q)
{
    $this->q = $q;
}

public function set_page_size($page_size)
{
    $this->page_size = abs((int)$page_size);
}

public function set_link_padding($padding)
{
    $this->link_padding = abs((int)$padding);
}

public function get_page($q='')
{
    if ($q) $this->set_query($q);

    $r = $this->db->query( $this->query_paging($this->q) );
    $this->total_rows = array_pop($this->db->query('SELECT FOUND_ROWS()')->fetch_row());

    if ($this->page_size !== 0) $this->total_pages = ceil($this->total_rows/$this->page_size);

    if ($this->cur_page > $this->total_pages)
    {
        $this->cur_page = $this->total_pages;
        if ( $this->total_pages > 0 ) $r = $this->db->query( $this->query_paging($this->q) );
    }

    return $r;
}

public function get_result_text()
{
    $start = (($this->cur_page-1) * $this->page_size)+1;
    $end = (($start-1+$this->page_size) >= $this->total_rows)? $this->total_rows:($start-1+$this->page_size);

    return sprintf($this->result_text_pattern, $start, $end, $this->total_rows);
}

public function get_page_links()
{
    if ( !isset($this->total_pages) ) return '';

    $page_link_list = array();

    $start = $this->cur_page - $this->link_padding;
    if ( $start < 1 ) $start = 1;
    $end = $this->cur_page + $this->link_padding-1;
    if ( $end > $this->total_pages ) $end = $this->total_pages;

    if ( $start > 1 )  $page_link_list[] = $this->get_page_link( $start-1, $start - 2 > 0 ? '...' : '' );
    for ($i=$start; $i <= $end; $i++)  $page_link_list[] = $this->get_page_link( $i );
    if ( $end + 1 < $this->total_pages ) $page_link_list[] = $this->get_page_link( $end +1, $end + 2 == $this->total_pages ? '' : '...' );
    if ( $end + 1 <= $this->total_pages ) $page_link_list[] = $this->get_page_link( $this->total_pages );

    return implode($this->page_link_separator, $page_link_list);
}

public function get_next_page_link()
{
    return isset($this->total_pages) && $this->cur_page < $this->total_pages ? $this->get_page_link( $this->cur_page + 1, $this->next_page_text ) : '';
}

public function get_prev_page_link()
{
    return isset($this->total_pages) && $this->cur_page > 1 ? $this->get_page_link( $this->cur_page - 1, $this->prev_page_text ) : '';
}

private function get_page_link($page, $text='')
{
    if (!$text)    $text = $page;

    if ($page != $this->cur_page)
    {
        $reg = '/((&|^)'.$this->page_var.'=)[^&#]*/';
        $url = '?'.( preg_match( $reg, $_SERVER['QUERY_STRING'] ) ? preg_replace($reg, '${1}'.$page, $_SERVER['QUERY_STRING']) : ( $_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'].'&' : '' ).$this->page_var.'='.$page);
        return '<a href="'.$url.'">'.$text.'</a>';
    }
    return '<span>'.$text.'</span>';
}

private function query_paging()
{
    $q = $this->q;

    if ($this->page_size != 0)
    {
        //calculate the starting row
        $start = ($this->cur_page-1) * $this->page_size;
        //insert SQL_CALC_FOUND_ROWS and add the LIMIT
        $q = preg_replace('/^SELECT\s+/i', 'SELECT SQL_CALC_FOUND_ROWS ', $this->q)." LIMIT {$start},{$this->page_size}";
    }

    return $q;
}
}
?>
 - Kevanger  - 4045  - 2  - Распечатать
RedRat:
Тогда ваш код будет преобразован:

$data_ = "";

$r = $_PAGING->get_page( "SELECT * FROM таблица WHERE name = 'Александр'");
while($rows = $r->fetch_assoc())
{
//выводим данные
$data_ .= '.$rows['name'].';
}

echo ($data_ ? $data_ : "Ничего тут нет");
27 февраля 2011 22:21
assentive:
Добрый вечер!
Откровенно признаюсь, что не имею профессиональных знаний и богатейшего опыта в php, поэтому прошу откликнуться на мою тему каждого, кто обладает более фундаментальными знаниями, чем я!

В свой проект мне нужно встроить постраничную навигацию (за основу взял Вашу статью), выполнил все действия согласно этой статьи!

Вывожу данные через:
$r = $_PAGING->get_page( "SELECT * FROM таблица WHERE name = 'Александр'");
while($rows = $r->fetch_assoc())
{
//выводим данные
echo '.$rows['name'].';
}

Проблема заключается в том, что мне нужно модифицировать код таким образом, что если при выборке из БД, данных соответствующих запросу не было найдено, то выходило сообщение типа: "Данных соответствующих Вашему запросу не найдено".

Прошу Вас откликнуться и помочь мне, заранее благодарю Вас за оказанную помощь!
27 февраля 2011 21:47
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.
© 2007-2011
«Клуб Админов»

Обратная связь
support@admin-club.ru

Разделы Категории Инфо Публикации
Новости Статьи О сайте Облочко Регистрация
Форум Скрипты Статистика Комментарии Вход
Почта Загрузки Реклама Артикус Пароль
Докс CMS's Правила
СЕО Шаблоны
Дизайн сайта www.artoflogic.ru Rambler's Top100