代码不起作用,将 MySQL 结果排序到页面中

问题描述 投票:0回答:2

好吧,我得到了这段代码,它应该从我的数据库中带回我的所有结果,并每页显示 5 个结果。 目前我的数据库中有 12 个结果,但只显示 10 个,它不会显示第三页,因为没有 5 个结果可显示。 这是我的代码

//$_GET['page'] is to get the current page opened
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; };
$results_per_page = "5"; //number of results I want displayed per page
$start_from = ($page-1) * $results_per_page; 
$query = "SELECT * FROM items WHERE subcat = '$conditions' LIMIT $start_from, $results_per_page";
$result = mysql_query($query) or die("Unable to verify user because : " . mysql_error());
while ($row_condition=mysql_fetch_array($result)) {
   //Display the results here
}

//Count number of results from database and work out how
//many pages I need to display all the results.    
$result1 = mysql_query("SELECT * FROM items WHERE subcat = '$conditions'");
$num_rows = mysql_num_rows($result1);
$num_pages = $num_rows / $results_per_page;

if ($num_rows > $results_per_page){
?>
<div id="pagenum">
<?php
//This creates and displays the page numbers for the user to select
foreach( range( 1, $num_pages) as $i) {
     if ($thepage == $i){
           echo '<b><a href="browse.php?condition=' . $condition . '&page=' . $i . '">' . $i . '</a></b>';
     }else{
           echo '<a href="browse.php?condition=' . $condition . '&page=' . $i . '">' . $i . '</a>';
     }

     //This places a line between each number of pages
     if ($i == $num_pages){
     }else{
         echo " | ";
     }
     }
?>
</div>
<?php
     }else{ echo "Test";}
?>

有人能看出这个问题吗?所以我的数据库中有 12 个条目。 然而我只得到了 2 页,每页 5 个,我没有得到第 3 页,因为只剩下 2 个结果,而且似乎需要 5 个来完成它。 谢谢

php mysql pagination
2个回答
3
投票

您需要使用ceil功能:

$num_pages = ceil($num_rows / $results_per_page);

1
投票

我认为你最大的问题是,当你将两个数字相除但不能得到一个整数时,PHP 会给你一个浮点数。

$one = 12;
$two = 5;
$result = $one / $two; // That will result in 2.4

现在的问题是,从技术上讲,您有三个页面,但 PHP 不会将 .4 页面视为一个页面,因此当您循环遍历它时,技术上只会执行两次。由于您的使用范围是 2.4,因此 PHP 似乎正在向下舍入。我会建议这样的事情:

$result1 = mysql_query("SELECT * FROM items WHERE subcat = '$conditions'");
$num_rows = mysql_num_rows($result1);
$num_pages = ceil($num_rows / $results_per_page);

if ($num_rows > $results_per_page){
    for($i = 0; $i < $num_pages; $i++) {

ceil() 将强制该除法每次都向上舍入,这将始终为您提供额外的页面。

试一试!如果它解决了您的问题,请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.