Page 1 of 1

Paginator help - displays ALL records

Posted: Mon Jun 14, 2010 7:56 pm
by scmeeker
I'm trying to add the Paginator script to my web page and it's almost there BUT it's bringing up all the records from my database instead of the select number of records. I'm posting my PHP code below (purposely leaving out my MySql connections), then I've attached the PHP reference file: paginator.class.php that's referenced in the code.

Thanks for your help!

Code: Select all

<?php
    include('paginator.class.php');
            
$mysqli = mysqli_connect("", "", "", "");


if (mysqli_connect_errno()) {
    printf("Connect falied: %s\n", mysqli_connect_error());
    exit ();
} else {
    $sql = "SELECT * FROM product";
    $res = mysqli_query($mysqli, $sql);
    $num_rows = mysqli_fetch_array($res);
    $pages = new Paginator;
    $pages->items_total = $num_rows[0];
    $pages->mid_range = 9; // Number of pages to display. Must be odd and > 3
    $pages->paginate();
  
    if ($res) {
        while ($newArray = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
        $detail = $newArray['id'];
        $photo = $newArray['photo'];
        $id = $newArray['title'];
        $price = $newArray['price'];
        
          
  list($width) = getimagesize($photo);
  // set the maximum width of the image here
  $maxWidth = 100;
  if ($width > $maxWidth)
  
      echo "<p><a href=\"painting.php\"><img alt=\"Image\" width=\"{$maxWidth}\" src=\"{$photo}\" /></a>";      
      echo "&nbsp;&nbsp;&nbsp;Title:&nbsp;&nbsp;&nbsp;".$id." Price:&nbsp;&nbsp;&nbsp;".$price."<br/";
}

   }else {
        printf("Could not retrieve records: %s\n", mysqli_error($mysqli));
    }
    
    mysqli_free_result($res);
    mysqli_close($mysqli);
}
?>
<br />
  <br /> 
      
      &nbsp;<?php 
  echo $pages->display_pages();
  echo "<span class=\"\">".$pages->display_jump_menu().$pages->display_items_per_page()."</span>";
  echo "<p class=\"paginate\">Page: $pages->current_page of $pages->num_pages</p>\n";
  ?>
Here are the details for the paginator.class.php file:

Code: Select all

<?php

class Paginator{
	var $items_per_page;
	var $items_total;
	var $current_page;
	var $num_pages;
	var $mid_range;
	var $low;
	var $high;
	var $limit;
	var $return;
	var $default_ipp = 25;
	var $querystring;

	function Paginator()
	{
		$this->current_page = 1;
		$this->mid_range = 7;
		$this->items_per_page = (!empty($_GET['ipp'])) ? $_GET['ipp']:$this->default_ipp;
	}

	function paginate()
	{
		if($_GET['ipp'] == 'All')
		{
			$this->num_pages = ceil($this->items_total/$this->default_ipp);
			$this->items_per_page = $this->default_ipp;
		}
		else
		{
			if(!is_numeric($this->items_per_page) OR $this->items_per_page <= 0) $this->items_per_page = $this->default_ipp;
			$this->num_pages = ceil($this->items_total/$this->items_per_page);
		}
		$this->current_page = (int) $_GET['page']; // must be numeric > 0
		if($this->current_page < 1 Or !is_numeric($this->current_page)) $this->current_page = 1;
		if($this->current_page > $this->num_pages) $this->current_page = $this->num_pages;
		$prev_page = $this->current_page-1;
		$next_page = $this->current_page+1;

		if($_GET)
		{
			$args = explode("&",$_SERVER['QUERY_STRING']);
			foreach($args as $arg)
			{
				$keyval = explode("=",$arg);
				if($keyval[0] != "page" And $keyval[0] != "ipp") $this->querystring .= "&" . $arg;
			}
		}

		if($_POST)
		{
			foreach($_POST as $key=>$val)
			{
				if($key != "page" And $key != "ipp") $this->querystring .= "&$key=$val";
			}
		}

		if($this->num_pages > 10)
		{
			$this->return = ($this->current_page != 1 And $this->items_total >= 10) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$prev_page&ipp=$this->items_per_page$this->querystring\">&laquo; Previous</a> ":"<span class=\"inactive\" href=\"#\">&laquo; Previous</span> ";

			$this->start_range = $this->current_page - floor($this->mid_range/2);
			$this->end_range = $this->current_page + floor($this->mid_range/2);

			if($this->start_range <= 0)
			{
				$this->end_range += abs($this->start_range)+1;
				$this->start_range = 1;
			}
			if($this->end_range > $this->num_pages)
			{
				$this->start_range -= $this->end_range-$this->num_pages;
				$this->end_range = $this->num_pages;
			}
			$this->range = range($this->start_range,$this->end_range);

			for($i=1;$i<=$this->num_pages;$i++)
			{
				if($this->range[0] > 2 And $i == $this->range[0]) $this->return .= " ... ";
				// loop through all pages. if first, last, or in range, display
				if($i==1 Or $i==$this->num_pages Or in_array($i,$this->range))
				{
					$this->return .= ($i == $this->current_page And $_GET['page'] != 'All') ? "<a title=\"Go to page $i of $this->num_pages\" class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" title=\"Go to page $i of $this->num_pages\" href=\"$_SERVER[PHP_SELF]?page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> ";
				}
				if($this->range[$this->mid_range-1] < $this->num_pages-1 And $i == $this->range[$this->mid_range-1]) $this->return .= " ... ";
			}
			$this->return .= (($this->current_page != $this->num_pages And $this->items_total >= 10) And ($_GET['page'] != 'All')) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$next_page&ipp=$this->items_per_page$this->querystring\">Next &raquo;</a>\n":"<span class=\"inactive\" href=\"#\">&raquo; Next</span>\n";
			$this->return .= ($_GET['page'] == 'All') ? "<a class=\"current\" style=\"margin-left:10px\" href=\"#\">All</a> \n":"<a class=\"paginate\" style=\"margin-left:10px\" href=\"$_SERVER[PHP_SELF]?page=1&ipp=All$this->querystring\">All</a> \n";
		}
		else
		{
			for($i=1;$i<=$this->num_pages;$i++)
			{
				$this->return .= ($i == $this->current_page) ? "<a class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> ";
			}
			$this->return .= "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=1&ipp=All$this->querystring\">All</a> \n";
		}
		$this->low = ($this->current_page-1) * $this->items_per_page;
		$this->high = ($_GET['ipp'] == 'All') ? $this->items_total:($this->current_page * $this->items_per_page)-1;
		$this->limit = ($_GET['ipp'] == 'All') ? "":" LIMIT $this->low,$this->items_per_page";
	}

	function display_items_per_page()
	{
		$items = '';
		$ipp_array = array(10,25,50,100,'All');
		foreach($ipp_array as $ipp_opt)	$items .= ($ipp_opt == $this->items_per_page) ? "<option selected value=\"$ipp_opt\">$ipp_opt</option>\n":"<option value=\"$ipp_opt\">$ipp_opt</option>\n";
		return "<span class=\"paginate\">Items per page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[PHP_SELF]?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>\n";
	}

	function display_jump_menu()
	{
		for($i=1;$i<=$this->num_pages;$i++)
		{
			$option .= ($i==$this->current_page) ? "<option value=\"$i\" selected>$i</option>\n":"<option value=\"$i\">$i</option>\n";
		}
		return "<span class=\"paginate\">Page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[PHP_SELF]?page='+this[this.selectedIndex].value+'&ipp=$this->items_per_page$this->querystring';return false\">$option</select>\n";
	}

	function display_pages()
	{
		return $this->return;
	}
}

Re: Paginator help - displays ALL records

Posted: Mon Jun 14, 2010 8:25 pm
by Christopher

Code: Select all

$sq; = SELECT * FROM product LIMIT $num_records_per_page OFFSET $start_record";

Re: Paginator help - displays ALL records

Posted: Mon Jun 14, 2010 9:19 pm
by scmeeker
Thanks Christopher. I tried plugging in that code but it gave me an error and wouldn't retrieve any records.

Any other suggestions?

I appreciate the help. :)

Re: Paginator help - displays ALL records

Posted: Tue Jun 15, 2010 6:53 pm
by Christopher
What was the error?

Besides my typo for the name of the $sql variable, what did you set as the values for $num_records_per_page and $start_record ?

Re: Paginator help - displays ALL records

Posted: Wed Jun 16, 2010 7:11 pm
by scmeeker
Hi Christopher, I didn't see variables for "$num_records_per_page and $start_record" within my script. I'm new to PHP, so inserting this Paginator has got me in a stump.

I appreciate your help. :)