Development

Simple PHP MySQL page system

A simple PHP MySQL page system written as a function with code comments. For this example i had the following in the database

The example data

Simple color names and an id, With an incrementing id or date using ORDER BY DESC gets the latest/most recent entry first than descends through to oldest.

I defined the code below so that Page 1 (which is actually page=0 in this example) shows id 15 to 12, Page 2 shows id 11 to 8, Page 3 shows id 7 to 4, Page 4 shows id 3 to 1.

page 1
page 2
page 3
page 4

Ignore the lack of styling (use buttons or icons for page changers) You can see that the first page does not have a previous page button and the last page does not have a next page button.

Here is the code all in a function with comments Gist link:

<?php
function pagination_system($page_number, $items_per_page)
{
    if ($page_number == 0) {
        $start_at = 0;//Items 0 to $items_per_page
    } else {
        $start_at = ($page_number * $items_per_page);//Assume itemsPP = 4. For Page 2 (1*4) so it shows items 4 to 8
        //For Page 3 (?page=2) equation is (2*4) so page=2 will show items 8 to 12
    }
    global $db;//Call DB connection details
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);//Allows to define a prepared statement for the LIMIT definer
    $statement = $db->prepare("SELECT `id`, `color` FROM `objects` ORDER BY `id` DESC LIMIT ?, $items_per_page");//Query
    $statement->execute(array($start_at));//Execute query
    $row_counter = 0;//Row counter start at 0
    while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {//Loop through the returned data
        echo "[" . $row['id'] . "] " . $row['color'] . "<br>";//Example output for this
        $row_counter++;//Adds 1 to row counter
    }
    $prev_page = $page_number - 1;//Previous page is current - 1
    $next_page = $page_number + 1;//next page is current + 1
    $is_last_page = 0;//Pre set
    if ($row_counter <= ($items_per_page - 1)) {//If less rows returned than itemsPP it is the last page
        $is_last_page = 1;
    }
    if ($page_number == 0) {
        if ($row_counter < $items_per_page) {
            echo "";//items per page is more than the items we have to paginate = no pagination needed.
        } else {//Is first page (0) DONT have a prev button
            echo "<a href='?page=$next_page'>[Next]</a>";//Change to Button/icon
        }
    } elseif ($is_last_page == 1) {//Is last page DONT have a next button
        echo "<a href='?page=$prev_page'>[Prev]</a>";//Change to Button/icon
    } else {
        echo "<a href='?page=$prev_page'>[Prev]</a>";//Change to Button/icon
        echo "<a href='?page=$next_page'>[Next]</a>";//Change to Button/icon
    }
}

This is called by

pagination_system($page, 4);

The function and call are put in page_system.php with the following up the top to determine the page number:

if (isset($_GET['page'])) {
    $page = $_GET['page'];//If ?page= is set use it
} else {
    $page = 0;//No ?page= found so we are at page 1 which is a zero
}

Don’t forget the MySQL PDO connection either before the function:

$db = new PDO('mysql:host=localhost;dbname=DATABASE;charset=utf8mb4', 'USERNAME', 'PASSWORD');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 

Share

Recent Posts

Kennington reservoir drained drone images

A drained and empty Kennington reservoir images from a drone in early July 2024. The…

1 year ago

Merrimu Reservoir drone images

Merrimu Reservoir from drone. Click images to view larger.

1 year ago

FTP getting array of file details such as size using PHP

Using FTP and PHP to get an array of file details such as size and…

2 years ago

Creating Laravel form requests

Creating and using Laravel form requests to create cleaner code, separation and reusability for your…

2 years ago

Improving the default Laravel login and register views

Improving the default Laravel login and register views in such a simple manner but making…

2 years ago

Laravel validation for checking if value exists in the database

Laravel validation for checking if a field value exists in the database. The validation rule…

2 years ago