Посторінковий вивід даних на PHP і MySQL

  1. Як працює посторінковий вивід інформації
  2. Готовий приклад з коментарями
  3. Як прибрати непотрібні вам функції
  4. Декілька порад

Автор статті: Сергій Камінський

Зараз багато сайтів використовують для зберігання інформації бази даних, в яких кількість записів часто досягає сотень і тисяч. Тому, для зручності користувачів, записи виводяться порціями, тобто посторінково. У цій статті я розповім як реалізувати це на своєму сайті за допомогою PHP і MySQL. У наведеному прикладі будуть виводитися посилання "вперед" і "назад", "на першу сторінку" і "на останню сторінку", а також ми зможемо обмежити кількість посилань, які будуть виводитися одночасно.

Як працює посторінковий вивід інформації

Для початку я обьясню принцип роботи посторінкового виведення, а потім ми розглянемо готовий приклад. Так як на одній сторінці має бути певна кількість записів, то ми обмежимо його в запиті до бази даних за допомогою параметра LIMIT, а параметр OFFSET буде вказувати з якою записи починати висновок. Наприклад обмежимо кількість записів по дві на кожній сторінці і почнемо висновок з першої сторінки (тобто з нульовою записи).

SELECT * FROM postranichno LIMIT 2 OFFSET 0;

Для виведення другої сторінки нам потрібно збільшити значення параметра OFFSET на кількість записів, тобто на два.

SELECT * FROM postranichno LIMIT 2 OFFSET 2;

Оскільки значення параметра OFFSET постійно змінюється, то ми кількість записів дамо змінної $ quantity, а номер з якого потрібно починати висновок ми будемо визначати, множачи номер сторінки на кількість записів, і привласнювати змінній $ list, а потім підставимо все це в запит.

Для того, щоб вивести навігацію для переходу між сторінками нам потрібно дізнатися загальна кількість записів в базі MySQL і поділити результат на кількість сторінок, округливши отримане число в більшу сторону. Давайте від теорії перейдемо до практики.

Готовий приклад з коментарями

Насамперед створимо файл config.inc.php, який буде з'єднуватися з базою даних MySQL. Ми будемо підключати його в усі скрипти, в яких потрібно робити запити до БД.

<? Php define ( 'DB_HOST', 'localhost'); // сервер БД define ( 'DB_USER', 'login'); // логін БД define ( 'DB_PASS', 'password'); // пароль БД define ( 'DB_NAME', 'database'); // ім'я БД if (! $ Conn = mysql_connect (DB_HOST, DB_USER, DB_PASS)) {echo 'не можу підключитися до сервера БД'; exit; } If (! Mysql_select_db (DB_NAME)) {echo 'не можу підключити БД'; exit; }?>

Щоб було на чому випробувати скрипт посторінкового виведення, ми створимо за допомогою install.php таблицю в базі даних MySQL і додамо туди сім записів.

<? Php // Підключаємо файл для з'єднання з базою даних include ( 'config.inc.php'); // Створюємо таблицю mysql_query ( "create table postranichno (title char (70) null, description char (255) null);"); // Додаємо дані в таблицю mysql_query ( "insert into postranichno values ​​( 'Назва статті номер 1', 'Опис статті номер 1')"); mysql_query ( "insert into postranichno values ​​( 'Назва статті номер 2', 'Опис статті номер 2')"); mysql_query ( "insert into postranichno values ​​( 'Назва статті номер 3', 'Опис статті номер 3')"); mysql_query ( "insert into postranichno values ​​( 'Назва статті номер 4', 'Опис статті номер 4')"); mysql_query ( "insert into postranichno values ​​( 'Назва статті номер 5', 'Опис статті номер 5')"); mysql_query ( "insert into postranichno values ​​( 'Назва статті номер 6', 'Опис статті номер 6')"); mysql_query ( "insert into postranichno values ​​( 'Назва статті номер 7', 'Опис статті номер 7')"); ?>

Запустіть install.php щоб записи додалися в базу даних. Тепер приступимо до написання основного PHP-скрипта postranichno.php, який і буде здійснювати посторінковий вивід з бази даних MySQL. Всі дії описуються в коментарях для кращого розуміння того, що ми робимо.

&lt;? Php // забороняємо висновок попереджень Error_Reporting (E_ALL & ~ E_NOTICE); // підключаємо файл, який встановлює з'єднання з базою даних include ( 'config.inc.php'); // Встановлюємо кількість записів, які будуть виводитися на одній сторінці // Поставте потрібну вам число. Для прикладу я вказав одну запис на сторінку $ quantity = 1; // Обмежуємо кількість посилань, які будуть виводитися перед і // після поточної сторінки $ limit = 3; // Якщо значення page = не є числом, то показуємо // користувачеві першу сторінку if (! Is_numeric ($ page)) $ page = 1; // Якщо користувач вручну поміняє в адресному рядку значення page = на нуль, // то ми визначимо це і поміняємо на одиницю, тобто відправимо на першу // сторінку, щоб уникнути помилки if ($ page <1) $ page = 1 ; // Дізнаємося кількість всіх доступних записів $ result2 = mysql_query ( "SELECT * FROM postranichno;"); $ Num = mysql_num_rows ($ result2); // Обчислюємо кількість сторінок, щоб знати скільки посилань виводити $ pages = $ num / $ quantity; // Округляем отримане число сторінок в більшу сторону $ pages = ceil ($ pages); // Тут ми збільшуємо число сторінок на одиницю щоб початкове значення було // дорівнює одиниці, а не нулю. Значення page = буде // збігатися з цифрою на засланні, яку будуть бачити відвідувачі $ pages ++; // Якщо значення page = більше числа сторінок, то виводимо першу сторінку if ($ page> $ pages) $ page = 1; // Виводимо заголовок з номером поточної сторінки echo '<strong style = "color: # df0000"> Сторінка №'. $ Page. '</ Strong> <br /> <br />'; // Змінна $ list вказує з якою записи починати виводити дані. // Якщо це число не визначено, то будемо виводити // з самого початку, тобто з нульовою записи if (! Isset ($ list)) $ list = 0; // Щоб у нас значення page = в адресі посилання збігалося з номером // сторінки ми будемо його збільшувати на одиницю при виведенні посилань, а // тут навпаки зменшуємо щоб нічого не порушити. $ List = - $ page * $ quantity; // Робимо запит підставляючи значення змінних $ quantity і $ list $ result = mysql_query ( "SELECT * FROM postranichno LIMIT $ quantity OFFSET $ list;"); // Вважаємо кількість отриманих записів $ num_result = mysql_num_rows ($ result); // Виводимо всі записи поточної сторінки for ($ i = 0; $ i <$ num_result; $ i ++) {$ row = mysql_fetch_array ($ result); echo '<div> <strong>'. $ Row [ "title"]. '</ Strong> <br />'. $ Row [ "description"]. '</ Div> <br>'; } Echo 'Сторінки:'; // _________________ початок блоку 1 _________________ // Виводимо посилання "назад" і "на першу сторінку" if ($ page> = 1) {// Значення page = для першої сторінки завжди дорівнює одиниці, // тому так і пишемо echo '< a href = " '. $ _SERVER [' SCRIPT_NAME '].'? page = 1"> <<< / a> & nbsp; '; // Так як ми кількість сторінок до цього зменшили на одиницю, // то для того, щоб потрапити на попередню сторінку, // нам не потрібно нічого обчислювати echo '<a href = "'. $ _SERVER [ 'SCRIPT_NAME']. ' ? page = '. $ page.' "> <</ a> & nbsp; '; } // __________________ кінець блоку 1 __________________ // На даному етапі номер поточної сторінки = $ page + 1 $ this = $ page +1; // Дізнаємося з якою посилання починати висновок $ start = $ this - $ limit; // Дізнаємося номер останньої посилання для виведення $ end = $ this + $ limit; // Виводимо посилання на всі сторінки // Початкове число $ j в нашому випадку має дорівнювати одиниці, а не нулю for ($ j = 1; $ j <$ pages; $ j ++) {// Виводимо посилання тільки в тому випадку , якщо їх номер більше або дорівнює // початкового значення, і менше або дорівнює кінцевому значенню if ($ j> = $ start && $ j <= $ end) {// Посилання на поточну сторінку виділяється жирним if ($ j == ( $ page +1)) echo '<a href="'. $_SERVER ['SCRIPT_NAME'].'?page='. $j.'"> <strong style = "color: # df0000">'. $ J. '</ Strong> </a> & nbsp; '; // Посилання на інші сторінки else echo '<a href="'. $_SERVER ['SCRIPT_NAME'].'?Page='. $j.'">'. $ J. '</a> & nbsp; '; }} // _________________ початок блоку 2 _________________ // Виводимо посилання "вперед" і "на останню сторінку" if ($ j> $ page && ($ page +2) <$ j) {// Щоб потрапити на наступну сторінку потрібно збільшити $ pages на 2 echo '<a href="'. $_SERVER ['SCRIPT_NAME'].'?page='. ($page +2).'">> </a> & nbsp; '; // Так як у нас $ j = кількість сторінок + 1, то тепер // зменшуємо його на одиницю і отримуємо посилання на останню сторінку echo '<a href = "'. $ _SERVER [ 'SCRIPT_NAME']. '? Page =' . ($ j -1). ' &quot;>>> </a> & nbsp; '; } // __________________ кінець блоку 2 __________________?>
посторінкова навігація

Як прибрати непотрібні вам функції

Я в коді виділив два блоки. Перший з них реалізує висновок посилань "назад" і "на першу сторінку". Другий, відповідно, "вперед" і "на останню сторінку". Якщо подібні можливості вам не потрібні, то просто видаліть дані блоки коду. Також в прикладі обмежена кіль посилань які виводяться до і після поточної сторінки, щоб не заповнювати ними все вікно браузера. Якщо вам це не потрібно, то поміняйте значення змінної $ limit на число, яке більше кількості сторінок, наприклад, 3000.

Декілька порад

Для того, щоб номери посилань відповідали номерам сторінок і відлік починався не з нуля, а з одиниці, мені довелося трохи ускладнити код. Сподіваюся, що коментарі допомогли вам у всьому розібратися. Ви можете змінювати кількість записів одночасно виведених на сторінці на потрібне вам ціле число - на роботу скрипта це ніяк не вплине. Точно також ви можете просто поміняти назву файлу postranichno.php на інше не змінюючи код.

Розміщуючи на своєму сайті посилання на першу сторінку ставте її відразу на postranichno.php? Page = 1, а не просто на postranichno.php. Обидва варіанти дадуть однаковий результат, але перший буде більш правильним вибором.

Якщо ви приберете всі коментарі, то помітите, що тут не так вже й багато коду і все набагато легше, ніж здається на перший погляд.

Інші записи по темі в розділі статті по PHP і MySQL

Копіювання статті заборонено.

Lt;?
Lt;?
Lt;?
Quot;>>> </a> & nbsp; '; } // __________________ кінець блоку 2 __________________?
Php?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: