PHP здебільшого використовується для зберігання та відображення даних із бази даних. Пагінацію можна виконати за допомогою ajax, але тут це робиться за допомогою не-ajax. У цьому підручнику ми дізнаємося розбиття на сторінки в PHP з MySQL . Давайте коротко розглянемо розмітку сторінок на прикладі -
Цілком можливо, що запит SQL SELECT може повернути мільйони записів. Не варто відображати всі записи на одній сторінці. Великий список записів на одній сторінці може зайняти багато часу, щоб завантажити сторінку, а також витратити час на пошук конкретних даних. Це може спричинити (призвести до) плутанини у свідомості користувача. Тому розділіть ці записи на кілька сторінок відповідно до вимог користувача.
Отже, що ми можемо зробити, щоб розподілити цю велику кількість записів на кількість сторінок? Метод розподілу одного списку на кілька сторінок відомий як Пагінація . Пейджінг означає показ результатів запиту на кількох сторінках замість однієї.
Що таке пагінація?
Пагінація — це спосіб відображення даних на кількох сторінках, а не розміщення їх на одній сторінці. Пагінація допомагає розділити записи на кілька сторінок, що робить дані більш читабельними та зрозумілими.
Пагінація є звичайним завданням для розробників PHP. MySQL допомагає розробнику створювати розбивку сторінок за допомогою МЕЖА речення, яке приймає два аргументи. Перший аргумент як ЗМІЩЕННЯ і другий аргумент кількість записів який повернеться з бази даних.
Давайте розглянемо деякі переваги та недоліки використання концепції розбиття на сторінки в PHP -
Переваги пагінації
- Пагінація дуже корисна у великих проектах, оскільки вона робить веб-роботу більш професійною. Це не тільки більш професійно, але й робить веб-сторінку набагато швидшою, точнішою та ефективнішою.
- За допомогою пагінації ми можемо заощадити час завантаження сторінки, розділивши дані на різні сторінки. Це позбавляє нас від завантаження великої кількості інформації одночасно.
Наприклад - Веб-сторінка з 1000 зображеннями завантажуватиме більше часу, ніж 50 зображень на кожній веб-сторінці.
Це означає, що для тисяч зображень потрібні тисячі HTTP-запитів, через що сторінка не відповідає. Ця проблема вирішується шляхом обмеження обсягу даних за допомогою розбиття на сторінки за допомогою пропозиції LIMIT. - Використання пагінації покращує взаємодію з користувачем, дохід від реклами та зменшує час завантаження сторінки.
Недоліки пагінації
Хоча є деякі вагомі переваги пагінації, багато розробників усе ще уникають її використання. Разом із деякими суттєвими перевагами, у розбивки сторінок також є кілька недоліків, а саме:
- Пагінація сама по собі є великими витратами на PHP, що є одним із недоліків пагінації. Це повністю накладні витрати, оскільки це зовнішня функція, яку можна реалізувати за рахунок сторонньої розмітки, стилю та логіки. Невеликий набір даних часто ігнорується для використання розбивки на сторінки.
- Розбивка на сторінки може спричинити низький рейтинг сторінки в пошуковій системі, тому що коли сторінка знаходиться далеко від домашньої сторінки та потребує кількох клацань, вона зазвичай не отримує високого рейтингу.
- Він також обмежує кількість посилань, публікацій у соціальних мережах, загальну кількість результатів, видимих на веб-сторінці, і прив’язку, яку отримує сторінка, коли інформація розділена на кілька сторінок.
Ви можете уникнути використання техніки розбиття на сторінки, змінивши структуру налаштувань навігації.
Реалізація пагінації за допомогою PHP і MySQL
Щоб реалізувати розбиття на сторінки, нам потрібен великий набір даних, щоб застосувати до нього розбивку на сторінки. Тому спочатку нам потрібно створити базу даних і таблицю. Після цього введіть записи в таблицю та почніть кодування для створення розбиття на сторінки. Щоб дані, отримані з бази даних, можна було розділити на кілька сторінок.
Тут ми наведемо два приклади нумерації сторінок. Перший приклад є простим і базовим прикладом створення розбиття на сторінки без CSS, тоді як у другому прикладі ми створимо розбиття на сторінки привабливим способом за допомогою CSS і початкового завантаження. Ви можете побачити вихід для обох. Нижче наведено кроки для створення сторінки;
Прості кроки для створення сторінки -
- Створити базу даних і таблицю. Введіть список записів у таблицю.
- Підключіться до бази даних MySQL.
- Створіть посилання на розбивку сторінок, щоб розділити дані на кількох сторінках і додати їх у нижню частину таблиці.
- Отримайте дані з бази даних і відобразіть їх на кількох сторінках.
Виконайте наведені нижче кроки один за одним і створіть просту пагінацію.
Приклад 1
Наведений нижче код є простим прикладом розбиття на сторінки, яке виконується на PHP за допомогою бази даних MySQL. Він розбиває дані, отримані з бази даних, на кілька сторінок. У цьому прикладі ми створимо пагінацію для алфавітів, які відображатимуться на кількох сторінках.
Створення бази даних
Перш за все, створіть базу даних з іменем пагінація як ми створили та назвали таблицю всередині нього алфавіт . Створіть атрибут за назвою id і алфавіт , і наведіть дані в таблиці.
Підключення до бази даних
Підключення файлу PHP до бази даних є обов’язковим завданням. Щоб ви могли відображати дані, що зберігаються в базі даних, на веб-сторінці. Тому підключіть базу даних у вашому файлі PHP для відображення даних на веб-сторінці.
Ви можете написати код підключення до бази даних у тому самому файлі, а також зберегти його окремо в іншому файлі та включити до необхідного файлу PHP. Код підключення до бази даних -
$conn = mysqli_connect('localhost', 'root', ''); if (! $conn) { die('Connection failed' . mysqli_connect_error()); } else { mysqli_select_db($conn, 'pagination'); }
У цьому підручнику ми використовуємо mysqli розширення. Отже, всі запити написані у форматі mysqli.
Отримати поточний номер сторінки
Наведений нижче код визначає номер сторінки, яку зараз відвідує користувач. Якщо його немає, за замовчуванням для нього встановлюється номер сторінки 1.
if (!isset ($_GET['page']) ) { $page = 1; } else { $page = $_GET['page']; }
Формула для нумерації сторінок
Для розбиття на сторінки вам потрібно встановити обмеження кількості записів, які відображатимуться на сторінці. Тут ми встановлюємо обмеження для результатів на сторінку до 10, тому він відображатиметься на кожній сторінці, як зазначено нижче:
Сторінка 1 - від A до J (1-10)
Сторінка 2 - K до T (11-20)
Сторінка 3 - від U до Z (21-26)
$results_per_page = 10; $page_first_result = ($page-1) * $results_per_page;
Отримати загальну кількість сторінок
$query = 'select *from alphabet'; $result = mysqli_query($conn, $query); $number_of_result = mysqli_num_rows($result); //determine the total number of pages available $number_of_page = ceil ($number_of_result / $results_per_page);
Отримати дані та відобразити на веб-сторінці
Наведений нижче код використовується для отримання даних із бази даних і відображення на веб-сторінках, які відповідно розділені.
$query = 'SELECT *FROM alphabet LIMIT ' . $page_first_result . ',' . $results_per_page; $result = mysqli_query($conn, $query); //display the retrieved result on the webpage while ($row = mysqli_fetch_array($result)) { echo $row['id'] . ' ' . $row['alphabet'] . '<br>'; }
Відобразити посилання на сторінки в URL
За допомогою цього коду URL-адреса веб-сторінки змінюватиметься для кожної сторінки.
for($page = 1; $page<= $number_of_page; $page++) { echo ' <a href="index2.php?page=" . $page ''>' . $page . ' '; </=>
Остаточний код
Тепер об’єднайте всі коди в один файл, щоб зробити розбивку на сторінки.
Файл: Index2.php
Pagination <?php //database connection $conn = mysqli_connect('localhost', 'root', ''); if (! $conn) { die('Connection failed' . mysqli_connect_error()); } else { mysqli_select_db($conn, 'pagination'); } //define total number of results you want per page $results_per_page = 10; //find the total number of results stored in the database $query = 'select *from alphabet'; $result = mysqli_query($conn, $query); $number_of_result = mysqli_num_rows($result); //determine the total number of pages available $number_of_page = ceil ($number_of_result / $results_per_page); //determine which page number visitor is currently on if (!isset ($_GET['page']) ) { $page = 1; } else { $page = $_GET['page']; } //determine the sql LIMIT starting number for the results on the displaying page $page_first_result = ($page-1) * $results_per_page; //retrieve the selected results from database $query = 'SELECT *FROM alphabet LIMIT ' . $page_first_result . ',' . $results_per_page; $result = mysqli_query($conn, $query); //display the retrieved result on the webpage while ($row = mysqli_fetch_array($result)) { echo $row['id'] . ' ' . $row['alphabet'] . '</br>'; } //display the link of the pages in URL for($page = 1; $page<= $number_of_page; $page++) { echo ' <a href="index2.php?page=" . $page ''>' . $page . ' '; } ?> </=>
Вихід:
Дивіться наведений нижче приклад поділу на сторінки -
Приклад 2
Наведений нижче приклад є ще одним прикладом розбиття на сторінки, у якому ми використовували CSS разом із HTML, щоб зробити перегляд веб-сторінки більш привабливим. CSS робить веб-сторінку більш креативною та привабливою. З іншого боку, MySQL зберігає дані в базі даних. Таким чином, ви можете вивчити розбивку сторінок набагато краще.
Ми написали весь код в одному файлі, за винятком підключення до бази даних. Тому ми створимо два файли, тобто connection.php і index1.php. Збережіть обидва файли в .php розширення. У наведеному нижче прикладі ви навчитеся створювати креативні та привабливі пагінації.
Файл: connection.php
Файл: index1.php
перетворити рядок на дату
Pagination table { border-collapse: collapse; } .inline{ display: inline-block; float: right; margin: 20px 0px; } input, button{ height: 34px; } .pagination { display: inline-block; } .pagination a { font-weight:bold; font-size:18px; color: black; float: left; padding: 8px 16px; text-decoration: none; border:1px solid black; } .pagination a.active { background-color: pink; } .pagination a:hover:not(.active) { background-color: skyblue; } <?php // Import the file where we defined the connection to Database. require_once 'connection.php'; $per_page_record = 4; // Number of entries to show in a page. // Look for a GET variable page if not found default is 1. if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page=1; } $start_from = ($page-1) * $per_page_record; $query = 'SELECT * FROM student LIMIT $start_from, $per_page_record'; $rs_result = mysqli_query ($conn, $query); ?> <br> <p>This page demonstrates the basic Pagination using PHP and MySQL. </p> <table class="table"> <tr> <th>ID</th> <th>Name</th> <th>College</th> <th>Score</th> </tr> <tbody> <tr> <td></td> <td></td> <td></td> <td></td> </tr> </tbody> </table> <?php $query = 'SELECT COUNT(*) FROM student'; $rs_result = mysqli_query($conn, $query); $row = mysqli_fetch_row($rs_result); $total_records = $row[0]; echo '</br>'; // Number of pages required. $total_pages = ceil($total_records / $per_page_record); $pagLink = ''; if($page>=2){ echo ' Prev '; } for ($i=1; $i<=$total_pages; $i++) { if ($i="=" $page) $paglink .=" <a class = " active' href="index1.php?page=" .$i.''>'.$i.' '; } else { $pagLink .= ' '.$i.' '; } }; echo $pagLink; if($page<$total_pages){ echo ' next '; } ?> <input id="page" type="number" min="1" max placeholder required> Go function go2Page() { var page = document.getElementById('page').value; page = ((page>)?:((page<1)?1:page)); window.location.href="index1.php?page=" +page; } < pre> <p> <strong>Output:</strong> </p> <p>See the below output for above pagination example -</p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-3.webp" alt="PHP Pagination"> <p>Note that code written inside the tag is used for styling and to give an attractive look to the table and pagination present inside the webpage. We also used bootstrap for this.</p> <h3>Explanation of code</h3> <p>Now, we will explain the code used for creating pagination.</p> <h3>Database creation</h3> <p>First of all, create a database named by <strong>pagination</strong> as we created and a table inside it named <strong>student</strong> . Create attribute by name <strong>Rank, Name, College,</strong> and <strong>Score</strong> , and provide at least 25 records in the table.</p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-4.webp" alt="PHP Pagination"> <h3>Database Connectivity</h3> <p>Connecting the PHP file to the database is a required task. In this tutorial, we are using <strong>mysqli</strong> extension. So, all the queries are written according to mysqli format.</p> <p>Database connectivity code can be written in the same file or you can also keep it separate into another file and include it to your required PHP file. Code for database connection-</p> <pre> $conn = mysqli_connect('localhost', 'root', ''); if (! $conn) { die('Connection failed' . mysqli_connect_error()); } else { mysqli_select_db($conn, 'pagination'); } </pre> <h3>Fetch data and display on webpage</h3> <p>As we have created dataset, now we need to fetch and display it to various webpages. The below code is used to retrieve the data from database and display on the webpages that are divided accordingly.</p> <h3>Fetch data</h3> <p>After establishing the database connection in 'connection.php' file, we just need to import it into our code using require_once keyword. We will explicitly define the number of records per page to show.</p> <pre> require_once 'connection.php'; $per_page_record = 4; // Number of entries to show in a page. // Look for a GET variable page if not found default is 1. if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page=1; } //determine the sql LIMIT starting number for the results on the displaying page $start_from = ($page-1) * $per_page_record; $query = 'SELECT * FROM student LIMIT $start_from, $per_page_record'; $rs_result = mysqli_query ($conn, $query); </pre> <h3>Display data</h3> <p>This section is very simple. In this section, we iterate the loop over the records that we fetched and display each record stored in columns of the table.</p> <pre> <tr> <td></td> <td></td> <td></td> <td></td> </tr> </pre> <h3>Pagination Link creation</h3> <p>Now the most important code is pagination link creation. So, we will create the Previous, Next, and numeric links for pagination and add them to bottom of the table.</p> <pre> if($page>=2) { echo ' Prev '; } for ($i=1; $i<=$total_pages; $i++) { if ($i="=" $page) $paglink .=" <a class = " active' href="index1.php?page=" .$i.''>'.$i.' '; } else { $pagLink .= ' '.$i.' '; } }; echo $pagLink; if($page<$total_pages){ echo ' next '; } < pre> <p>Without using CSS, the pagination will be created same as the screenshot below, which is similar to the example 1.</p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-5.webp" alt="PHP Pagination"> <p>After including CSS code into the index1.php file, the pagination will be looked like the screenshot below. In example 1, we have created simple pagination that was logically correct, but visually it is not so good. </p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-6.webp" alt="PHP Pagination"> <h3>Code for Random Moment</h3> <p>In case when the number of pages is too much, this code helps us for random moment. By entering the page number in the input field, a user can directly move to that page. This code is written in JavaScript.</p> <pre> function go2Page() { var page = document.getElementById('page').value; page = ((page>)?:((page<1)?1:page)); window.location.href="index1.php?page=" +page; } < pre> <p>Apart from all these codes, we have also included bootstrap into index1.php to make the table view good. This code is written inside the tag.</p> <pre> </pre> <hr></1)?1:page));></pre></$total_pages){></=$total_pages;></pre></1)?1:page));></$total_pages){></=$total_pages;>
Отримання даних і відображення на веб-сторінці
Оскільки ми створили набір даних, тепер нам потрібно отримати та відобразити його на різних веб-сторінках. Наведений нижче код використовується для отримання даних із бази даних і відображення на веб-сторінках, які відповідно розділені.
Отримати дані
Після встановлення з’єднання з базою даних у файлі «connection.php» нам просто потрібно імпортувати його в наш код за допомогою ключового слова require_once. Ми явно визначимо кількість записів на сторінку для показу.
require_once 'connection.php'; $per_page_record = 4; // Number of entries to show in a page. // Look for a GET variable page if not found default is 1. if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page=1; } //determine the sql LIMIT starting number for the results on the displaying page $start_from = ($page-1) * $per_page_record; $query = 'SELECT * FROM student LIMIT $start_from, $per_page_record'; $rs_result = mysqli_query ($conn, $query);
Відображення даних
Цей розділ дуже простий. У цьому розділі ми повторюємо цикл над отриманими записами та відображаємо кожен запис, що зберігається в стовпцях таблиці.
<tr> <td></td> <td></td> <td></td> <td></td> </tr>
Створення посилань на сторінки
Тепер найважливішим кодом є створення посилань на сторінки. Отже, ми створимо попередні, наступні та цифрові посилання для розбиття на сторінки та додамо їх унизу таблиці.
if($page>=2) { echo ' Prev '; } for ($i=1; $i<=$total_pages; $i++) { if ($i="=" $page) $paglink .=" <a class = " active\' href="index1.php?page=" .$i.\'\'>'.$i.' '; } else { $pagLink .= ' '.$i.' '; } }; echo $pagLink; if($page<$total_pages){ echo \' next \'; } < pre> <p>Without using CSS, the pagination will be created same as the screenshot below, which is similar to the example 1.</p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-5.webp" alt="PHP Pagination"> <p>After including CSS code into the index1.php file, the pagination will be looked like the screenshot below. In example 1, we have created simple pagination that was logically correct, but visually it is not so good. </p> <img src="//techcodeview.com/img/php-tutorial/93/php-pagination-6.webp" alt="PHP Pagination"> <h3>Code for Random Moment</h3> <p>In case when the number of pages is too much, this code helps us for random moment. By entering the page number in the input field, a user can directly move to that page. This code is written in JavaScript.</p> <pre> function go2Page() { var page = document.getElementById('page').value; page = ((page>)?:((page<1)?1:page)); window.location.href="index1.php?page=" +page; } < pre> <p>Apart from all these codes, we have also included bootstrap into index1.php to make the table view good. This code is written inside the tag.</p> <pre> </pre> <hr></1)?1:page));></pre></$total_pages){></=$total_pages;>
1)?1:page));>$total_pages){>=$total_pages;>1)?1:page));>$total_pages){>=$total_pages;>