Repository
https://github.com/php/php-src
What Will I Learn?
- Basic OOP Class
- Use Function in a Class
- Database PDO, Connection, Query
Requirements
- Basic HTML
- Basic OOP
- Basic Sql Query
- Localhost (xampp, wampp, or etc)
- PHP >= 5.6
Difficulty
- Intermediate
Tutorial Contents
In this tutorial, we will learn how to create pagination with PHP OOP system. by using OOP we will create many Classes and functions that will make this pagination system to be dynamic and does not apply to certain data only.
Preparation
I will create a project folder with the name pagination and create a folder inside. The folder name is class and create a file index.php. I will also create a database to use to create pagination.
Create database
The database name is faker and its table name is users. I will use faker to get dummy data. You can use dummy data for your database, please visit https://github.com/fzaninotto/Faker.The structure of table users
Name | Type | Length/value | Indeks |
---|---|---|---|
id | INT | 11 | Primary |
username | Varchar | 100 | -- |
city | Varchar | 100 | -- |
Varchar | 100 | -- |
Create pagination{}
class
We will create the class Pagination{}
and in the Pagination class, we will create some variables whose contents will often be used.
- Variable declaration
Example:
<?php
class Pagination{
private $db, $table, $total_records, $limit = 5;
}
?>
- In the class pagination I will create some variables to store data that will be used frequently.
1. $db: This variable will save the connection to the database.
2. $table: This variable will be the parameter of the table name that will be used.
3. $total_records: This variable will store the total amount of data in the database.
4. $limit = 5: This variable will be the reference amount of data to be displayed on each page. The value is 5.
- Create
__construct (){}
function
Example:
<?php
class Pagination{
private $db, $table, $total_records, $limit = 5;
//PDO connection
public function __construct($table){
$this->table = $table;
$this->db = new PDO("mysql:host=localhost; dbname=faker", "root", "root");
$this->set_total_records();
}
}
?>
- We will create a function
__construct(){}
. __construct() will be run the first time the function is created. I will explain what will be run in the function __construct ():
1. $this->table = $table; : assigns a value to the variable$table
with the value we get from the parameters in the function__contruct ($table)
.
2. Connection to the PDO database : We can connect to PDO database withnew PDO ()
method and we can save these connections into variables that have been declared above$this->db
.
Example:
new PDO("databaseDriver:host=localhost; dbname=databaseName", "username", "password");
3. Call function set_total_records ()
: We need to get the amount of data in the database for us to use as a reference number of pages to be displayed. function set_total_records ()
is created outside the function __construct ()
.
- Create
set_total_records(){}
function
Example:
<?php
class Pagination{
public function set_total_records(){
$stmt = $this->db->prepare("SELECT id FROM $this->table");
$stmt->execute();
$this->total_records = $stmt->rowCount();
}
}
?>
- We use the PDO database to make the Query SQL. We can use the
prepare ()
and to run the query we can useexecute ()
. I made a simple query"SELECT id FROM $this->table"
to retrieve the id from the 'users' table and do count withrowCount ()
. $this->table is a variable that has been assigned a value in the function__construct()
and then we save the result of the sum in the variable$total_records
.
Noted: We can access the variables inside the function by using $this
.
- Create
current_page(){}
function
We can detect the current page through the parameter query,?page=pageNumber
. We can detect viaisset()
method and then we can do logic to make the value 1 as a minimum number of pages. statement ? if true : if false. This function only returns the value of the page. This function returns value of the page we will use in theget_data()
Example:
public function current_page(){
return isset($_GET['page']) ? (int)$_GET['page'] :1;
}
- Create
get_data(){}
function
We will retrieve data from database via functionget_data ()
.
Example:
public function get_data(){
$start = 0;
if($this->current_page() > 1){
$start = ($this->current_page() * $this->limit) - $this->limit;
}
$stmt = $this->db->prepare("SELECT * FROM $this->table LIMIT $start, $this->limit");
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_OBJ);
}
We will check if the current page is larger than
> 1
. We can get the value of current page via$this->current_page()
. if $this->current_page() > 1 then we will do the math operation($this->current_page() * $this->limit) - $this->limit;
and We will store the value in$start
as a reference starting from the order in which we get the data in the database..Then we can do the a query with
SELECT * FROM $this->table LIMIT $start, $this->limit
. it's means SELECT * FROM tableName LIMIT startFrom, limitAnd we can return data with object type
fetchAll(PDO::FETCH_OBJ)
Create
get_pagination_number(){}
function
to display the index page. we can create the following function:
Example:
public function get_pagination_number(){
return ceil($this->total_records / $this->limit);
}
- This function ceil() the result of the division between the amount of data
$this->total_records
and the limit$this->limit
. $this->total_records is a variable whose value has been assigned when the__construct ()
function is executed. $this->limit is a variable that we have assigned with value 5.
Using pagination{}
class
We have made the functions in the pagination class, now we will see the usefulness of each of these functions.
get_data ()
We have finished creating the pagination{}
class. Now we can already use it in index.php.
<?php
require_once 'class/Pagination.php';
$pagination = new Pagination('users');
$users = $pagination->get_data();
var_dump($users);
?>
We import the pagination class with
require_once 'class/Pagination.php'
. adjust to your file directory.We initialize the new class on the
$pagination
variable and we passed the 'users' parameter. This parameter will be accepted by__construct ()
and used as table name. adjust the table name in your database with this parameter.We have created
get_data ()
function in the previous section. We have initialized the class pagination inside the$pagination
variable.Now we can use it like this$pagination->get_data()
. then we save the result in variable$users
and I willvar_dump()
to see the data in browser.The Result
- Use data in HMTL
We can display existing data on the variable$users
in list HTML. Because $users is an array we can doforeach()
to extract the data.
Example:
<?php
require_once 'class/Pagination.php'
$pagination = new Pagination('users');
$users = $pagination->get_data();
?>
<!DOCTYPE html>
<html>
<head>
<title>Pagination PDO Class</title>
</head>
<body>
<ul>
<? foreach ($users as $user): ?>
<li><? echo $user->username. ':' .$user->email;?> </li>
<? endforeach; ?>
</ul>
</body>
</html>
- to extract data, we can make initialization with
$users as $user
. now we can expend the value with$user-> key
. We can use:
andendforeach;
to replace{}
.
- The result
We can see in the picture, the parameter query we do successfully process in the database. so when we want to open the third page. we can pass ?page=3
in the browser URL.
get_pagination_numbers()
We can use this function to display the pages that can be clicked by the user. We have created this function in the class ofpagination {}
, here's how to use it:
Example:
<?php
require_once 'class/Pagination.php';
$pagination = new Pagination('users');
$users = $pagination->get_data();
$pages = $pagination->get_pagination_numbers();
?>
- Use data in HMTL
The results of theget_pagination_numbers ()
function is the number of pages. We can dofor()
to sort it.
Example:
<?php
require_once 'class/Pagination.php'
$pagination = new Pagination('users');
$users = $pagination->get_data();
$pages = $pagination->get_pagination_numbers();
?>
<!DOCTYPE html>
<html>
<head>
<title>Pagination PDO Class</title>
</head>
<body>
<ul>
<? foreach ($users as $user): ?>
<li><? echo $user->username. ':' .$user->email;?> </li>
<? endforeach; ?>
</ul>
<hr>
<? for($=i; $i<=$pages; $i++): ?>
<a href="?page=<? echo $i;?>"><? echo $i;</a>
<? endfor; ?>
</body>
</html>
We do for the
$pages
variable that contains the number of pages.We can use:
andendforeach;
to replace{}
.The result
Thank you for following this tutorial, in the next section I will create a better user interface on the page number.
Hey alfarisi94, thank you for your contribution. Nice work with the markdowns. Looking forward for your next contribution!
Your contribution has been evaluated according to Utopian rules and guidelines, as well as a predefined set of questions pertaining to the category.
To view those questions and the relevant answers related to your post,Click here
Need help? Write a ticket on https://support.utopian.io/.
Chat with us on Discord.
[utopian-moderator]
Hey @alfarisi94, your contribution was unvoted because we found out that it did not follow the Utopian rules.
Upvote this comment to help Utopian grow its power and help other Open Source contributions like this one.
Want to chat? Join us on Discord.