A simple PHP MySQL page system written as a function with code comments. For this example i had the following in the database
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.
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);
A drained and empty Kennington reservoir images from a drone in early July 2024. The…
Merrimu Reservoir from drone. Click images to view larger.
Using FTP and PHP to get an array of file details such as size and…
Creating and using Laravel form requests to create cleaner code, separation and reusability for your…
Improving the default Laravel login and register views in such a simple manner but making…
Laravel validation for checking if a field value exists in the database. The validation rule…