标签:twitter-bootstrap pagination mysql php
我正在尝试使用PHP,MySQL&的客户表使用分页引导程序.我写了这段代码:
<div class="container mx-auto">
<!--Add class table-responsive for responsive table -->
<table class="table mx-auto">
<thead>
<tr>
<th>Name</th>
<th>Surname</th>
<th>Email</th>
<th>Phone</th>
<th>Address</th>
<th>Zipcode</th>
<th>City</th>
<th>Company</th>
</tr>
</thead>
<tbody>
<ul class="pagination">
<?php
if(isset($_GET['page'])){
$previous = $_GET['page'] - 1;
if($previous = -1 ){
$previous = 0;
}
if($previous = 0){
echo '<li class="page-item"><a class="page-link" href="#">Previous</a></li>';
}
else{
echo '<li class="page-item"><a class="page-link" href="?page='. $previous.'">Previous</a></li>';
}
}
$page_max = 10;
$entriesInDatabase = $database->getData("SELECT count(id) FROM customers");
$numberOfPages = ceil($entriesInDatabase['count(id)']/$page_max);
for($i = 0; $i < $numberOfPages; $i++){
echo '<li class="page-item"><a class="page-link" href="?page='. $i . '">'. $i. '</a></li>';
}
if(isset($_GET['page'])) {
$page = $_GET['page'];
$start = $page * 10;
$end = ($page + 1) * 10;
var_dump($start);
var_dump($end);
}
else{
$page = 0;
$start = $page * 10;
$end = 10;
}
$customers = $database->getUsers("SELECT * FROM customers LIMIT $start, $end");
?>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
<?php
foreach($customers as $customer){
$name = $customer ['name'];
$surname = $customer['surname'];
$email = $customer['email'];
$phone = $customer['phone'];
$address = $customer['address'];
$zipcode = $customer['zipcode'];
$city = $customer['city'];
$company = $customer['company'];
$id = $customer['id'];
echo "<tr>
<td>$name</td>
<td>$surname</td>
<td>$email</td>
<td>$phone</td>
<td>$address</td>
<td>$zipcode</td>
<td>$city</td>
<td>$company</td>
</tr>";
}
?>
我希望每个页面显示数据库中的10条记录,以便对我的SQL查询施加限制.现在发生的事情如下:第0页显示10条记录,第1页显示20条记录,第2页也显示20条记录,但第9页显示11条记录.
谁能帮我解决这个问题?
解决方法:
您最好考虑一下其工作原理,而不是仅仅看代码.
首先,您需要知道:
>表格中有多少条记录?您可以使用COUNT()
>每页显示多少个条目?您可以解决此问题,例如每页10个或任何数量.
然后,您需要了解LIMIT的工作原理.如果您执行诸如LIMIT 50,LIMIT 50之类的操作,则意味着使用50作为起始点(“从表中的第51条记录开始”-记住索引从0开始)并获得接下来的10行.后一个数字10是要在每页上显示的行数.
就构造链接而言,最简单的方法是使URL中的?page =参数成为LIMIT查询的第一个值,因为此值每页都会变化(例如,在上面的示例中为50),在此您知道另一个数字(10 )是常数.通过对表中的记录数除以每页的记录数,可以生成这些链接.这将为URL输出适当的数字.
假设您的数据库中有362条记录,并且希望每页显示10条记录.这将产生URL:
$per_page = 10;
$records_in_db_table = 362; // You must calculate this from a COUNT() query
$n = ceil($records_in_db_table / $per_page);
for ($x=0; $x<$n; $x++) {
$page = ($x * $per_page);
echo '?page=' . $page;
}
上面的代码输出:
?page=0
?page=10
?page=20
?page=30
// ...
?page=360
然后,您只需将它们输入查询的LIMIT条件,例如
>?page = 10 == LIMIT 10,10
>?page = 20 == LIMIT 20,10
>?page = 30 == LIMIT 30,10
>等…
还值得注意的是,如果您尝试限制记录数超过现有记录数,则无需担心会发生什么.例如,最后一个URL(?page = 360)的大小为LIMIT 360(10).数据库中只有362条记录,因此您可能会认为这将不起作用,因为该查询只能返回2条记录.但是,它只会返回最后2个,没问题.
同样地,如果您尝试使用的数字超出记录总数(?page = 99999,给出LIMIT 99999,10),它将只返回一个空结果集,而不是一个错误.有些人将内容编码为简单检查,例如
if ((int)$_GET['page'] > $records_in_db_table) {
// Display error message
}
请记住,您应该清理$_GET [‘page’]或至少将其转换为整数.不要将$_GET中的任何内容直接注入查询中,并尽可能使用参数绑定(例如PDO).
您可能还需要查看DataTables(https://datatables.net/),因为它无需编写任何此类代码即可满足您的大量需求,并且可以与Bootstrap很好地配合使用.
标签:twitter-bootstrap,pagination,mysql,php 来源: https://codeday.me/bug/20191025/1931375.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。