Jump to content

PHP Pagination class issue


skurai

Recommended Posts

I have a basic pagination class, I have used on several pages of a site I am working on. It works fine on 3 of the pages, but when I try to use it on any other pages, or even a new blank page I wrote, it does not work.

 

class Pagination {

    public $current_page;
    public $per_page;
    public $total_count;

    public function  __construct($page=1, $per_page=20, $total_count=0) {
        $this->current_page = (int)$page;
        $this->per_page = (int)$per_page;
        $this->total_count = (int)$total_count;
    }

    public function offset(){
        return ($this->current_page - 1) * $this->per_page;
    }

    public function total_pages(){
        return ceil($this->total_count/$this->per_page);
    }

    public function previous_page(){
        return $this->current_page - 1;
    }

    public function next_page(){
        return $this->current_page + 1;
    }

    public function has_prev_page(){
        return $this->previous_page() >= 1 ? true : false;
    }

    public function has_next_page(){
        return $this->next_page() <= $this->total_pages() ? true : false;
    }

That is the pagination class, and this is the code I use to call it, along with some debugging information I am using.

      
        if(isset($_GET['order'])){ $order = $_GET['order']; } else { $order = "id"; }
        if(isset($_GET['orderby'])){ $order_by = $_GET['orderby']; } else { $order_by = "ASC"; }      
            $page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
            $per_page = 2;
            $sql = mysql_query("SELECT * FROM orders WHERE customerid = 4");
            $result = mysql_fetch_array($sql);
            $total_count = mysql_num_rows($sql);
            //$total_count = Order::count_by_cust(4);
            $pagination = new Pagination($page, $per_page, $total_count);
            $sql = "SELECT * FROM orders WHERE customerid = 4 ORDER BY {$order} {$order_by} ";
            $sql .= "LIMIT {$per_page} ";
            $sql .= "OFFSET {$pagination->offset()}";  
            $orders = Order::find_by_sql($sql); 
            echo "Page:" . $page . "<br />PerPage:" . $per_page . "<br />Total:" . $total_count . "<br />Total Pages:" . $pagination->total_pages();
?>

SOME FOREACH INFORMATION HERE

<?php 
echo "Has Prev Page:" . $pagination->has_prev_page() . "<br />";
echo "Total Pages:" . $pagination->total_pages() . "<br />";
echo "Has Next Page:" . $pagination->has_next_page() . "<br />";

?>
<div id="pagination" style="clear: both; text-align: center;">
    <?php
    if ($pagination->total_pages() > 1){
        if ($pagination->has_prev_page() == 1){
            echo "<a href=\"orders.php?search&uid={$order->customerid}&order={$order}&orderby={$order_by}&page=";
            echo $pagination->previous_page();
            echo "\">« Previous</a>";
        }

        for($i=1; $i<=$pagination->total_pages(); $i++){
            if($i == $page){
               echo " <span class=\"selected\">{$i}</span> ";
            } else {
            echo " <a href=\"orders.php?search&uid={$order->customerid}&order={$order}&orderby={$order_by}&page={$i}\">{$i}</a> ";
            }
        }

        if ($pagination->has_next_page() == 1){
            echo "<a href=\"orders.php?search&uid=" . $order->customerid . "&order=" . $order . "&orderby=" . $order_by . "&page=";
            echo $pagination->next_page();
            echo "\">Next »</a>";
        }
    }
    ?>
    </div>

 

The customer ID is dynamic, but for debugging sake I am using the customer ID of 4. The output of the page has the following informaton:

Page:1

PerPage:2

Total:15

Total Pages:8

 

Has Prev Page:

Total Pages:8

Has Next Page:1

 

So i know all the variables are right, the problem is, it only prints a bold "1". Thats all, no numbers, or Next Page option.

However i use the EXACT same code in another couple pages, and it works fine, but with this current page and a few others. It does not work.

 

I have also tryed extracting just this information into a blank file to just get the page numbers, taking out all the pages other code, and it still only gives me "1".

 

Any ideas?

 

Link to comment
https://forums.phpfreaks.com/topic/222412-php-pagination-class-issue/
Share on other sites

Look below that, the SQL is used in the Order Object lookup.

            $sql = "SELECT * FROM orders WHERE customerid = 4 ORDER BY {$order} {$order_by} ";
            $sql .= "LIMIT {$per_page} ";
            $sql .= "OFFSET {$pagination->offset()}";  
            $orders = Order::find_by_sql($sql);

 

The SQL above that was for testing the $total_count. I have tried it the way it is, and using the commented $total_count = Order::count_by_cust(4);

 

Just for clarification, here is the find_by_mysql function in the Order object.

	public static function find_by_sql($sql=""){
	global $database;
	$result_set = $database->query($sql);
	$object_array = array();
	while ($row = $database->fetch_array($result_set)){
		$object_array[] = self::instantiate($row);
	}

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.