Разделы сайта
Поиск по сайту
Новое
В картинках
А так же
Постраничный вывод данных из MySQL
1 июля 2010
Простой и универсальный метод постраничного вывода данных из
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; } } ?>
RedRat :
Тогда ваш код будет преобразован:
$data_ = ""; $r = $_PAGING->get_page( "SELECT * FROM таблица WHERE name = 'Александр'"); while($rows = $r->fetch_assoc()) { //выводим данные $data_ .= '.$rows['name'].'; } echo ($data_ ? $data_ : "Ничего тут нет");
assentive :
Добрый вечер! Откровенно признаюсь, что не имею профессиональных знаний и богатейшего опыта в php, поэтому прошу откликнуться на мою тему каждого, кто обладает более фундаментальными знаниями, чем я! В свой проект мне нужно встроить постраничную навигацию (за основу взял Вашу статью), выполнил все действия согласно этой статьи! Вывожу данные через: $r = $_PAGING->get_page( "SELECT * FROM таблица WHERE name = 'Александр'"); while($rows = $r->fetch_assoc()) { //выводим данные echo '.$rows['name'].'; } Проблема заключается в том, что мне нужно модифицировать код таким образом, что если при выборке из БД, данных соответствующих запросу не было найдено, то выходило сообщение типа: "Данных соответствующих Вашему запросу не найдено". Прошу Вас откликнуться и помочь мне, заранее благодарю Вас за оказанную помощь!
Информация
Посетители, находящиеся в группе Гости , не могут оставлять комментарии в данной новости.
Обновленные темы
Robots.txt сегодня 22:36, noggano77777 Данные сайта сегодня 22:34, noggano77777 Настройка и вопрос сегодня 22:32, noggano77777 Проблема с плагином сегодня 22:19, Womanizer 2 вопроса сегодня 17:15, patriot-himki Не отображает превью и сами фото сегодня 13:28, memf1s Кто как двигает сайты в топ ? сегодня 01:53, OTM Как заставить dle снова обновить базу? вчера 19:20, noggano77777 АП выдачи 02.02.2012 позавчера 21:49, Womanizer Пинг сервисы позавчера 21:18, Womanizer
Что крутит инет
- Какой поисковик рулит?
А так же
На сайте
Пользователей: 1
weiss
Роботов: 1
Google
Гостей: 13
Всех: 15