PHP Pagination
PHP分页 PHP主要用于存储和显示数据库中的数据。分页可以使用ajax完成,但此处使用非ajax完成。在本教…
PHP分页
PHP主要用于存储和显示数据库中的数据。分页可以使用ajax完成,但此处使用非ajax完成。在本教程中,我们将学习MySQL与PHP的分页。让我们用一个示例简要回顾一下分页-
SQLSELECT查询可能会返回数百万条记录。在单个页面上显示所有记录不是一个好主意。单个页面上的大量记录可能会花费大量时间来加载页面,并且还会花费时间来查找特定数据。这可能导致(导致)用户头脑混乱。因此,根据用户要求将这些记录分为几页。
那么,我们该怎么做才能将这些大量的记录分布在页面中?将单个列表分布到多个页面中的方法称为分页。分页是指在多页而非单页上显示查询结果。
什么是分页?
分页是一种在多页上显示数据而不是将数据放在单个页上的方法。分页有助于将记录分为几页,从而使数据更具可读性和可理解性。
分页是PHP开发人员的常见任务。MySQL通过使用带有两个参数的LIMIT子句帮助开发人员创建分页。第一个参数为OFFSET,第二个参数为将从数据库返回的记录数。
让我们看看在PHP中使用分页概念的一些优缺点-
分页的优点
- 分页在大型项目中非常有用,因为它使网络更加专业。不仅更加专业,而且还使网页的运行速度更快,更精确,更高效。
- 借助分页,我们可以通过将数据划分到各个页面上来节省页面的加载时间。它使我们免于一次加载很多信息。
例如-包含1000张图像的网页比每个网页上50张图像需要更多的时间来加载图像。
这意味着成千上万的图像需要成千上万的HTTP请求,这会使页面无响应。通过使用LIMIT子句进行分页来限制数据量可以解决此问题。
- 分页的使用可改善用户体验,增加广告收入并减少页面的加载时间。
分页的缺点
例如-包含1000张图像的网页比每个网页上50张图像需要更多的时间来加载图像。
这意味着成千上万的图像需要成千上万的HTTP请求,这会使页面无响应。通过使用LIMIT子句进行分页来限制数据量可以解决此问题。
分页虽然有一些强大的优点,但是仍然有许多开发人员避免使用它。除了一些强大的优点之外,分页的缺点也很少,如下所示:
- 分页本身是PHP的一大开销,这是分页的缺点之一。这完全是一项开销,因为它是一项外部功能,可以以多余的标记,样式和逻辑为代价来实现。一个小的数据集经常被忽略使用分页。
- 分页可能会导致搜索引擎上的页面排名较低,因为当页面离开首页并需要多次单击时,通常不会获得较高的页面排名。
- 它还将链接的数量,社交份额,结果总数显示在网页上,以及将信息拆分为多个页面时页面接收的锚文本。
您可以通过修改导航设置的结构来避免使用分页技术。
用PHP和MySQL实现分页
为了实现分页,我们需要一个大数据集以对其应用分页。因此,首先我们需要创建一个数据库和表。之后,提供表中的记录并开始编码以创建分页。这样,从数据库中获取的数据可以分为几页。
在这里,我们将介绍两个分页示例。第一个示例是没有CSS的分页创建的简单基础示例,而在第二个示例中,我们将使用CSS和bootstrap以有吸引力的方式创建分页。您可以看到两者的输出。以下是创建分页的步骤;
创建分页的简单步骤-
- 创建一个数据库和表。在表中提供记录列表。
- 与MySQL数据库连接。
- 创建分页链接以将数据拆分为多个页面,并将其添加到表的底部。
- 从数据库中获取数据并将其显示到多个页面。
请按照下面的步骤一个接一个地创建简单的分页。
例子1
下面的代码是一个简单的分页示例,它是通过PHP在MySQL数据库的帮助下完成的。它将从数据库中获取的数据分成几页。在此示例中,我们将创建用于在多个页面上显示的字母的分页。
数据库创建
首先,在创建时创建一个由分页命名的数据库,并在其中创建一个名为Alphabet的表。通过名称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 . ' </a>';
最终密码
现在,将所有代码放在一个文件中以进行分页。
文件:Index2.php
<html>
<head>
<title> Pagination </title>
</head>
<body>
<?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 . ' </a>';
}
?>
</body>
</html>
输出:
有关上述分页示例,请参见以下输出-

例子2
下面的示例是分页的另一个示例,其中我们将CSS和HTML结合使用以使网页视图更具吸引力。CSS使网页更具创意和吸引力。另一方面,MySQL将数据存储在数据库中。因此,您可以更好地学习分页。
除了数据库连接性之外,我们已经将整个代码编写在一个文件中。因此,我们将创建两个文件,即connection.php和index1.php。将两个文件都保存为.php扩展名。在下面的示例中,您将学习创建更具创意和吸引力的分页。
- php:创建用于数据库连接
- php:创建用于分页
文件:connection.php
<?php
$conn = mysqli_connect('localhost', 'root', '');
if (! $conn) {
die("Connection failed" . mysqli_connect_error());
}
else {
mysqli_select_db($conn, 'pagination');
}
?>
文件:index1.php
<html>
<head>
<title>Pagination</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<style>
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;
}
</style>
</head>
<body>
<center>
<?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);
?>
<div>
<br>
<div>
<h2>Pagination Simple Example</h2>
<p>This page demonstrates the basic
Pagination using PHP and MySQL.
</p>
<table>
<thead>
<tr>
<th width="10%">ID</th>
<th>Name</th>
<th>College</th>
<th>Score</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_array($rs_result)) {
// Display each field of the records.
?>
<tr>
<td><?php echo $row["Rank"]; ?></td>
<td><?php echo $row["Name"]; ?></td>
<td><?php echo $row["College"]; ?></td>
<td><?php echo $row["Score"]; ?></td>
</tr>
<?php
};
?>
</tbody>
</table>
<div>
<?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 "<a href='index1.php?page=".($page-1)."'> Prev </a>";
}
for ($i=1; $i<=$total_pages; $i++) {
if ($i == $page) {
$pagLink .= "<a class = 'active' href='index1.php?page="
.$i."'>".$i." </a>";
}
else {
$pagLink .= "<a href='index1.php?page=".$i."'>
".$i." </a>";
}
};
echo $pagLink;
if($page<$total_pages){
echo "<a href='index1.php?page=".($page+1)."'> Next </a>";
}
?>
</div>
<div>
<input id="page" type="number" min="1" max="<?php echo $total_pages?>"
placeholder="<?php echo $page."/".$total_pages; ?>" required>
<button onClick="go2Page();">Go</button>
</div>
</div>
</div>
</center>
<script>
function go2Page()
{
var page = document.getElementById("page").value;
page = ((page><?php echo $total_pages; ?>)?<?php echo $total_pages; ?>:((page<1)?1:page));
window.location.href = 'index1.php?page='+page;
}
</script>
</body>
</html>
输出:
有关上述分页示例,请参见以下输出-

请注意,
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。

还没有任何评论,赶紧来占个楼吧!