Постраничный вывод из MySQL |
||||
---|---|---|---|---|
Итак, вы много раз видели, как дынные выводятся постранично и вы всегда хотели сделать так на своем сайте. Как это сделать с файлом я уже описывал. Сегодня я расскажу как сделать постраничный вывод из MySQL. Для начала немного теории. Что надо сделать? Сначала, надо проверить выбрана ли страница просмотра. Потом надо подсчитать откуда выводить записи. Делается это просто: текущую страницу умножаем на количество записей на страницу. Наконец, надо сделать SQL-запрос к базе данных и вывести результат. И в конце концов написать нивигацию. Приступим. Выполните SQL-запрос:
CREATE TABLE tbl_books ( book_id int(11) NOT NULL auto_increment, book_name varchar(50) NOT NULL default '', book_cash float NOT NULL default '0', PRIMARY KEY (book_id) ) TYPE=MyISAM; INSERT INTO tbl_books VALUES (1, 'Книга номер 1', '2'); INSERT INTO tbl_books VALUES (2, 'Книга номер 2', '3'); INSERT INTO tbl_books VALUES (3, 'Книга номер 3', '4'); INSERT INTO tbl_books VALUES (4, 'Книга номер 4', '5'); INSERT INTO tbl_books VALUES (5, 'Книга номер 5', '6'); INSERT INTO tbl_books VALUES (6, 'Книга номер 6', '7'); INSERT INTO tbl_books VALUES (7, 'Книга номер 7', '8'); INSERT INTO tbl_books VALUES (8, 'Книга номер 8', '9'); INSERT INTO tbl_books VALUES (9, 'Книга номер 9', '10'); INSERT INTO tbl_books VALUES (10, 'Книга номер 10', '11'); INSERT INTO tbl_books VALUES (11, 'Книга номер 11', '12'); INSERT INTO tbl_books VALUES (12, 'Книга номер 12', '13'); INSERT INTO tbl_books VALUES (13, 'Книга номер 13', '14'); INSERT INTO tbl_books VALUES (14, 'Книга номер 14', '15'); INSERT INTO tbl_books VALUES (15, 'Книга номер 15', '16'); Я предлагаю все оформить в виде функций обработчиков. Создадим функцию page(), которая обрабатывает данные о запрошенном номере страницы:
<?php function page() { if(empty($_GET["page"])){ $page = 0; } else { if(!is_numeric($_GET["page"])) die("Неправильный формат номера страницы!"); $page = $_GET["page"]; } return $page; } Что она делает? Проверяет выбрана ли страница и если в ней присутствуют буквы, то выводит сообщение об ошибке. Далее сделаем SQL-запрос:
function sql_query($onpage, $page, $table) { $begin = $page*$onpage; // откуда начинать $sql = "SELECT * FROM ".$table." LIMIT ".$begin.", ".$onpage; $result = mysql_query($sql) or die(mysql_error()); return $result; } Функция навигации:
function navigation($onpage, $page, $table) { $return = null; $count = mysql_query("SELECT COUNT(*) FROM tbl_books") or die(mysql_error()); $count = mysql_fetch_array($count); $count = $count[0]; $pages = $count/$onpage; if($page!==0){ $prev = "<A HREF=\"?page=".($page-1)."\"><</A>"; } else { $prev = "<"; } if($page<round($pages-1)){ $next = "<A HREF=\"?page=".($page+1)."\">></A>"; } else { $next = ">"; } for($i=0;$i<$pages;$i++) { if($i==$page){ $return.="[".($i+1)."]"; } else { $return.="<A HREF=\"?page=".$i."\">[".($i+1)."]</A>"; } } return $prev.$return.$next; } С функциями покончили! Как ими пользоваться?
$onpage = 4; // записей на страницу $table = "tbl_books"; // из какой таблицы mysql_connect("localhost", "root", "pass") or die(mysql_error()); // коннект к БД mysql_select_db("test"); // выбор БД $page = page(); // определяем страницу $result = sql_query($onpage, $page, $table); // sql - запрос while($data = mysql_fetch_array($result)) // цикл вывода { // шаблон вывода нужно изменить // $data["название_поля"] - содержание поля echo $data["book_id"]." <B>".$data["book_name"]."</B><BR>"; echo $data["book_cash"]."$<P>"; } $navigation = navigation($onpage, $page, $table); // определим навигацию echo $navigation; // выведем ее mysql_close(); // отключение от БД ?> |