Paging php sample code

Simple Pagination In PHP MySQL (Step-By-Step Example)

Welcome to a tutorial on how to create simple pagination with PHP and MySQL. Yes, there are a lot of frameworks out there that deal with pagination, but some left people scratching their heads with an insanely long “how to use bible”. So here it is, let us walk through a simple “DIY pagination” example that does not require any third-party frameworks – Read on!

TLDR – QUICK SLIDES

Simple Pagination With PHP MySQL

TABLE OF CONTENTS

PHP MYSQL PAGINATION

All right, let us now get started with the pagination example with a dummy user table.

STEP 0) DUMMY USERS TABLE

CREATE TABLE `users` ( `id` bigint(20) NOT NULL, `name` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `users` ADD PRIMARY KEY (`id`), ADD KEY `name` (`name`); ALTER TABLE `users` MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT; INSERT INTO `users` (`id`, `name`) VALUES (1, 'John Doe'), (2, 'Jane Doe'), (3, 'Rusty Terry'), (4, 'Peers Sera'), (5, 'Jaslyn Keely'), . ; 

Before we go into the scripts, let us begin by creating a dummy user table to work with. This is but a simple one with 2 fields – The ID and name.

Читайте также:  Браузерные события в javascript

STEP 1) CONNECT TO THE DATABASE

 PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); 

Yep, step 1 of the script should be very “Captain Obvious”. Just a couple of settings and connecting to the database itself.

STEP 2) GET THE TOTAL NUMBER OF PAGES

// (C) TOTAL NUMBER OF PAGES $stmt = $pdo->prepare("SELECT CEILING(COUNT(*) / ".PER_PAGE.") `pages` FROM `users`"); $stmt->execute(); $pageTotal = $stmt->fetchColumn(); 
  • In the previous step, we have set the pagination to show 10 entries per page – define(«PER_PAGE», «10»)
  • So, the total number of pages can then be easily obtained with a single SQL query – SELECT CEILING(COUNT(*) / PER_PAGE) `pages` FROM `users` .

STEP 3) GET ENTRIES FOR THE CURRENT PAGE

prepare("SELECT * FROM `users` ORDER BY `id` LIMIT $limX, $limY"); $stmt->execute(); $users = $stmt->fetchAll(); 

With that, we can now move forward to get the entries for the current page.

  • For this demo, we will use $_GET[«page»] ( http://site.com/1-paginate.php?page=N ) to switch between the pages. If $_GET[«page»] is not set, we will assume that it is page 1.
  • To get the entries for the current page, we need to run a «SELECT * FROM `users` LIMIT X, Y query.
    • If you are new – X is the starting row, and Y is the number of rows to extract.
    • On page 1, we fetch entries 1 to 10. That is X = 0 and Y = 10 .
    • On page 2, we fetch entries 11 to 20. That is X = 10 and Y = 10 .
    • On page 3, we fetch entries 21 to 30. That is X = 20 and Y = 10 , and so on.
    • $limX = ($pageNow — 1) * PER_PAGE;
    • $limY = PER_PAGE;

    STEP 4) OUTPUT HTML

    • Output the user entries – foreach ($users as $u) < . >
    • Draw the pagination squares – for ($i=1; $i

    Of course, feel free to use your own favorite library to create a nice list and pagination – Bootstrap, Material Design, etc…

    DOWNLOAD & NOTES

    Here is the download link to the example code, so you don’t have to copy-paste everything.

    SUPPORT

    600+ free tutorials & projects on Code Boxx and still growing. I insist on not turning Code Boxx into a «paid scripts and courses» business, so every little bit of support helps.

    EXAMPLE CODE DOWNLOAD

    Click here for the source code on GitHub gist, just click on “download zip” or do a git clone. I have released it under the MIT license, so feel free to build on top of it or use it in your own project.

    That’s all for this guide, and here is a small section on some extras and links that may be useful to you.

    ADDING SEARCH & FILTER

    To add a “search box with pagination”, we simply need to add an HTML form.

    Then change the SQL accordingly to also include the search term/restrictions:

    // TOTAL NUMBER OF PAGES $stmt = $pdo->prepare("SELECT CEILING(COUNT(*) / ".PER_PAGE.") `pages` FROM `users` WHERE `name` LIKE ?"); $stmt->execute(["%".$_GET["search"]."%"]); // GET USERS $stmt = $pdo->prepare("SELECT * FROM `users` WHERE `name` LIKE ? LIMIT $limX, $limY"); $stmt->execute(["%".$_GET["search"]."%"]);

    TUTORIAL VIDEO

    INFOGRAPHIC CHEAT SHEET

    THE END

    Thank you for reading, and we have come to the end of this guide. I hope that it has helped you with your project, and if you want to share anything with this guide, please feel free to comment below. Good luck and happy coding!

    Источник

    Постраничная навигация php: простой скрипт

    Постраничная навигация php: простой скрипт

    С проблемой создания постраничной навигации на языке php сталкиваются многие новички-программисты и не все понимают, как она должна работать. Рассмотрим подробно и по пунктам, как создать самую простую пагинацию.

    Для начала представим, что у нас уже есть запрос, который в нужном формате выводит все записи из нужной таблицы.

    // Подключение к бд $db = mysql_connect("localhost","root",""); mysql_select_db("phpsite",$db); // Вывод записей из таблицы $result = mysql_query("SELECT * FROM `lessons`", $db); $myrow = mysql_fetch_array($result); do< echo "

    ".$myrow['title']."

    "; echo "

    ".$myrow['text']."

    "; > while ($myrow = mysql_fetch_array($result));

    Разбиваем страницы на нужное количество

    Мы получили все записи на странице, но теперь их нужно разбивать. Для разбития на страницы мы добавим в наш запрос — вывод определённого количества записей, с помощью «LIMIT».

    $result = mysql_query("SELECT * FROM `lessons` LIMIT $art,$kol",$db);

    Отлично, теперь создадим переменную $page, она будет показывать текущею страницу, на который мы находимся.

    К примеру, мы выводим по две записи на страницу, то есть если мы находимся на 1 странице — выводим первые две записи.

    $page = 1; // текущая страница $kol = 3; //количество записей для вывода $art = ($page * $kol) - $kol; // определяем, с какой записи нам выводить $result = mysql_query("SELECT * FROM `lessons` LIMIT $art,$kol",$db);

    Переменную $art мы получаем по формуле — количество записей умножаются на текущую страницу, тем самым мы получаем последнюю запись на текущей странице. И вычитаем «количество записей на страницу».

    Определяем страницу, на которой находимся

    Теперь у нас для нужной страницы отображаются нужные записи, но нужно ещё определить, на какой мы странице находимся, для этого воспользуемся глобальной переменной $_GET.

    if (isset($_GET['page']))< $page = $_GET['page']; >else $page = 1;

    Мы получаем текущую страницу через переменную $_GET, а если мы этой переменной нет, то у нас по умолчанию первая страница.

    Формируем постраничную навигацию

    Для формирования и вывода пагинации нам нужно узнать количество всех записей, найдём это через простой запрос:

    $res = mysql_query("SELECT COUNT(*) FROM `lessons`"); $row = mysql_fetch_row($res); $total = $row[0]; // всего записей

    Затем нужно узнать, сколько у нас будет страниц:

    Делим количество записей на количество выводимых на страницу и округляем до большего числа

    Теперь у нас есть всё, чтобы сформировать наши ссылки для навигации, выведем через цикл:

    Источник

    Простая пагинация на php

    Решил описать такой на первый взгляд простой но очень интересный момент в web программирование как пагинация.
    Наверное каждый web программист хоть раз да и сталкивался с пагинацией, и понимает что универсального решения нет! По этому я предлагаю посмотреть те простые решения которые сам использую.

    p.s. В топике приведен пример пагинации на php, без использования AXAJ и тд. Это сделано для того что б продемонстрировать саму суть, так сказать сделать каркас.

    image

    Поехали!

    И так начнем. Представим что у нас есть большое количество какого то контента контента (заметки, товары и тд). И вот в один момент мы понимаем что отображать все это на одной странице, неправильно и не хорошо. По этому мы решаем этот контент разбить на части (страницы).
    Но для того что б нам это сделать нам нужно знать несколько значений.

    • Количество всех страниц.
    • Количество отображаемых страниц в пагинации.
    • Текущую страницу
    Если честно то данных нам нужно немножко больше, но все это зависит от того какую именно пагинацию мы хотим сделать, так что об остальных данных мы поговорим чуть позже.

    image

    Допустим количество всех страниц нам известно и оно 45. Текущую страницу мы будем брать с $_GET’а, а если её там нет, то задавать она будет ровна 1.
    А вот с количеством отображаемых страниц все интересней, я решил дать нашему скрипту немного гибкости, так что мы могли сами задать количество ссылок с лева и права от текущей странице, выглядит это примерно так:

    $iCurr = (empty($_GET[‘page’]) ? 1 : intval($_GET[‘page’]));

    /*всего страниц или конечная страница*/

    $iLeftLimit = 4;
    $iRightLimit = 5;

    /*вызов функции*/
    makePager($iCurr, $iLastPage, $iLeftLimit, $iRightLimit) ;

    Ну вот все данные у нас уже есть и можно заняться самой функцией пагинации.

    1. текущая страница — $iCurr
    2. всего страниц или конечная страница — $iLastPage
    3. левый лимит — $iLeftLimit
    4. правый лимит- $iRightLimit

    Я специально убрал вывод, что б не засорять код, но он мог выглядеть например так:
    if($iCurr > $iLeft && $iCurr < ($iEnd-$iRight))
    for($i=$iCurr-$iLeft; $i echo ».($i == $iCurr ? ‘‘.$i.’‘ : $i).» ;
    >>

    Давай посмотрим код поближе.
    Первый вариант развития событий, это если наша страница находиться где то в центре (например страница 8), и количество страниц с лева и с права могут свободно отображаться, это самый простой вариант из возможных.

    А что же будет если мы находиться например на странице номер 2?
    Ведь в условии мы задали что нужно отображать с лева 4 ссылки.
    Тогда нам на помощь приходит следующий код:

    $iSlice — это количество элементов которые не будут показаны с лева, и которые соотвецтвенно нужно добавить справа, что количество ссылок оставалось постоянным.

    Можно было б if’ом запретить вывод страницы если она меньше 1 и больше макс. странице но это б было так не красиво.

    Ну и последний вариант, что если мы находимся например на 44 странице, и показать с права 5 мы не можем тк, страниц всего 45?
    И код:
    else $iSlice = $iRight-($iEnd — $iCurr);
    for($i=$iCurr-($iLeft+$iSlice); $i //вывод
    >>

    P.S.

    Еще несколько вариаций на тему:
    Если нам не важно что б количество выводимых ссылок было одинаковое то можно 2 и 3 условия заменить такими:
    //второе условия:
    elseif($iCurr <=$iLeft)
    for($i=1; $i //вывод
    > >

    Источник

Оцените статью