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 删除。
还没有任何评论,赶紧来占个楼吧!