简体   繁体   中英

PHP Pagination for MySQL posts

I've been trying for hours to implement a pagination for a blog that I am working on, but I just can't find it to work. In the URL, it gives me (myurl).php?pageno=

Without the page number requested.

This is my page to handle the database request:

<?php

require_once("db-connect.php");

$offset = 0;
$page_result = 5; 

if($_GET['pageno'])
{
 $page_value = $_GET['pageno'];
 if($page_value > 1)
 {  
  $offset = ($page_value - 1) * $page_result;
 }
}


$results = mysqli_query($connection, "SELECT * FROM blog where $condition ORDER BY date DESC LIMIT $offset, $page_result")

or die(mysqli_error('No Records Found'));

?>

This is my blog page code:

<?php

                       if (mysqli_num_rows($results) > 0) {
                           // output data of each row
                           while($row = mysqli_fetch_assoc($results)) {
                               echo "<li class='background-white'><div class='column large-4'><a href='".$row['link']."' class='text-black1' title='".$row["arttitle"]."'>"."<img src='http://tmggeotech.com/img/blog/".$row['thumbnail']."' alt='".$row['thumbalt']."'/>"."</a></div>"."<div class='column large-8 article-data'>"."<h4><a href='".$row['link']."' class='text-black1' title='".$row["arttitle"]."'>".$row["arttitle"]."</a></h4>"."<small class='text-black2'>Publicado el <span class='text-orange2'>".date('m/d/Y', strtotime($row['date']))."</span> | "."Categoría: <span class='text-orange2'>".$row["category"]."</span></small>"."<p>".$row["excerpt"]."</p>"."</div>"."</li>";
                           } }else {
                           echo "0 results";
                       }

                       $pagecount = 50; // Total number of rows
                       $num = $pagecount / $page_result;

                       if($_GET['pageno'] > 1) {
                           echo "<a href='noticias-perforacion-suelos-articulos-maquinas-blog.php?pageno='".($_GET['pageno'] - 1).">Prev</a>";
                       }
                       for($i = 1 ; $i <= $num ; $i++) {
                           echo "<a href='noticias-perforacion-suelos-articulos-maquinas-blog.php?pageno='".$i.">".$i."</a>";
                       }
                       if($num != 1) {
                           echo "<a href='noticias-perforacion-suelos-articulos-maquinas-blog.php?pageno='".($_GET['pageno'] + 1).">Next</a>";
                       }

                       ?>

So my question is:

Is it there something I am missing here to make it work?

Thanks to @ccKep for point out some clues on how to get what I needed. I just made it work.

In page to handle the database request, I added a second request but without LIMIT, so that I could use num_rows with it:

<?php

require_once("db-connect.php");

$offset = 0;
$page_result = 5; 

if($_GET['pageno'])
{
 $page_value = $_GET['pageno'];
 if($page_value > 1)
 {  
  $offset = ($page_value - 1) * $page_result;
 }
}


$results = mysqli_query($connection, "SELECT * FROM blog where $condition ORDER BY date DESC LIMIT $offset, $page_result")

or die(mysqli_error('No Records Found'));


$npages = mysqli_query($connection, "SELECT * FROM blog where $condition ORDER BY date DESC")

or die(mysqli_error('No Records Found'));

?>

Later, on my blog page I round up my posts to the next multiple of 5 number. And also changed my last if statement so that the NEXT button disappears after getting the last page.

<?php

                       if (mysqli_num_rows($results) > 0) {
                           // output data of each row
                           while($row = mysqli_fetch_assoc($results)) {
                               echo "<li class='background-white'><div class='column large-4'><a href='".$row['link']."' class='text-black1' title='".$row["arttitle"]."'>"."<img src='http://tmggeotech.com/img/blog/".$row['thumbnail']."' alt='".$row['thumbalt']."'/>"."</a></div>"."<div class='column large-8 article-data'>"."<h4><a href='".$row['link']."' class='text-black1' title='".$row["arttitle"]."'>".$row["arttitle"]."</a></h4>"."<small class='text-black2'>Publicado el <span class='text-orange2'>".date('m/d/Y', strtotime($row['date']))."</span> | "."Categoría: <span class='text-orange2'>".$row["category"]."</span></small>"."<p>".$row["excerpt"]."</p>"."</div>"."</li>";
                           } }else {
                           echo "0 results";
                       }


                       $x = ceil($npages->num_rows/5) * 5;


                       $pagecount = $x; // Total number of rows
                       $num = $pagecount / $page_result;

                       if($_GET['pageno'] > 1) {
                           echo "<a href='noticias-perforacion-suelos-articulos-maquinas-blog.php?pageno=".($_GET["pageno"] - 1)."'>Prev</a>";
                       }
                       for($i = 1 ; $i <= $num ; $i++) {
                           echo "<a href='noticias-perforacion-suelos-articulos-maquinas-blog.php?pageno=".$i."'>".$i."</a>";
                       }
                       if($_GET['pageno'] == $num) {
                           echo "";
                       } else {
                           echo "<a href='noticias-perforacion-suelos-articulos-maquinas-blog.php?pageno=".($_GET["pageno"] + 1)."'>Next</a>";
                       }
                       ?>

You might notice that I am not a very good coder, so if you find a less messy way to do this please let me know.

Cheers!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM