This class will display the results of any MySQL table including all the fields and rows. It will work out how many fields there are and display the results accordingly.
You can view a demo HERE
When changing the table in the demo if you change to CD list and go through them it like pressing number 2 or next it will go back to DVD's as this is a class tutorial. Was mainly to show you that it works
Start:
PHP Code:
class pagination{
}
PHP Code:
var $p=1, $max_r,$limits;
var $count_all=0,$sql,$total,$table,$totalres,$totalpages;
var $r,$i;
var $show=10;
PHP Code:
function connect($host,$username,$password,$name){
$connectect = mysql_connect($host, $username, $password) or die(mysql_error());
$selected = mysql_select_db($name) or die(mysql_error());
}
PHP Code:
function setMax($max_r){
$this->p = $_GET['p'];
$this->max_r = $max_r;
if(empty($this->p))
{
$this->p = 1;
}
$this->limits = ($this->p - 1) * $this->max_r;
}
PHP Code:
function setData($table){
$this->table = $table;
$this->sql = "SELECT * FROM ".$this->table." LIMIT ".$this->limits.",".$this->max_r."";
$this->sql = mysql_query($this->sql) or die(mysql_error());
$this->total = "SELECT * FROM ".$this->table."";
$this->totalres = mysql_query($this->total) or die(mysql_error());
$this->count_all = mysql_num_rows($this->totalres); // count all the rows
$this->totalpages = ceil($this->count_all / $this->max_r); // work out total pages
}
PHP Code:
function display(){
echo "<b>Total Values(s):</b>".$this->count_all."<br><br>";
echo "<b>Page:</b> ".$this->p."<br>";
$fields=mysql_num_fields($this->totalres); // workout number of fields
echo "<table border=1 width=100%><tr>";
for ($i=0; $i < mysql_num_fields($this->sql); $i++) //Table Header
{
print "<th>".mysql_field_name($this->sql, $i)."</th>"; //display field name
}
echo "</tr>";
while ($row = mysql_fetch_row($this->sql))
{
echo "<tr>";
for ($f=0; $f < $fields; $f++)
{
echo "<td>$row[$f]</td>";
}
echo "</tr>\n";
}
echo "</table><p>";
}
PHP Code:
function displayLinks($show){
$this->show = $show; // How many links to show
echo "<br><br>";
if($this->p > 1) // If p > then one then give link to first page
{
echo "<a href=?p=1> [FIRST] </a> ";
}
else
{ // else show nothing
echo "";
}
if($this->p != 1)
{ // if p aint equal to 1 then show previous text
$previous = $this->p-1;
echo "<a href=?p=$previous> [ PREVIOUS ] </a>";
}
else
{ //else show nothing
echo "";
}
for($i =1; $i <= $this->show; $i++) // show ($show) links
{
if($this->p > $this->totalpages)
{ // if p is greater then totalpages then display nothing
echo "";
}
else if($_GET["p"] == $this->p)
{ //if p is equal to the current loop value then dont display that value as link
echo $this->p ;
}
else{
echo " <a href=?p=".$this->p."> ( ".$this->p.") </a>"; // else display the rest as links
}
$this->p++; //increment $p
}
echo "....."; // display dots
if($_GET["p"] == $this->totalpages)
{// if page is equal to totalpages then dont display the last page at the end of links
echo "";
}
else // else display the last page link after other ones
{
echo "<a href=?p=".$this->totalpages."> ( ".$this->totalpages.") </a>";
}
if($_GET["p"] < $this->totalpages)// if p is less then total pages then show next link
{
$next = $_GET["p"] + 1;
echo "<a href=?p=$next> [ NEXT >] </a>";
}
echo "<br><br>";
}
PHP Code:
$page= new pagination;
$page->connect("host","username","password","dbname");
$page->setMax(25); // 25 being number of results to be displaued
$page->setData("tablename");
$page->display();
$page->displayLinks(5); // 5 being number of links to display
Full CODE:
PHP Code:
<?php
class pagination{
var $p=1, $max_r,$limits;
var $count_all=0,$sql,$total,$table,$totalres,$totalpages;
var $r,$i;
var $show=10;
function connect($host,$username,$password,$name){
$connectect = mysql_connect($host, $username, $password) or die(mysql_error());
$selected = mysql_select_db($name) or die(mysql_error());
}
function setMax($max_r){
$this->p = $_GET['p'];
$this->max_r = $max_r;
if(empty($this->p))
{
$this->p = 1;
}
$this->limits = ($this->p - 1) * $this->max_r;
}
function setData($table){
$this->table = $table;
$this->sql = "SELECT * FROM ".$this->table." LIMIT ".$this->limits.",".$this->max_r."";
$this->sql = mysql_query($this->sql) or die(mysql_error());
$this->total = "SELECT * FROM ".$this->table."";
$this->totalres = mysql_query($this->total) or die(mysql_error());
$this->count_all = mysql_num_rows($this->totalres);
$this->totalpages = ceil($this->count_all / $this->max_r);
}
function display(){
echo "<b>Total Values(s):</b>".$this->count_all."<br><br>";
echo "<b>Page:</b> ".$this->p."<br>";
$fields=mysql_num_fields($this->totalres);
echo "<table border=1 width=100%><tr>";
for ($i=0; $i < mysql_num_fields($this->sql); $i++) //Table Header
{
print "<th>".mysql_field_name($this->sql, $i)."</th>";
}
echo "</tr>";
while ($row = mysql_fetch_row($this->sql))
{
echo "<tr>";
for ($f=0; $f < $fields; $f++)
{
echo "<td>$row[$f]</td>";
}
echo "</tr>\n";
}
echo "</table><p>";
}
function displayLinks($show){
$this->show = $show; // How many links to show
echo "<br><br>";
if($this->p > 1) // If p > then one then give link to first page
{
echo "<a href=?p=1> [FIRST] </a> ";
}
else{ // else show nothing
echo "";
}
if($this->p != 1){ // if p aint equal to 1 then show previous text
$previous = $this->p-1;
echo "<a href=?p=$previous> [ PREVIOUS ] </a>";
}
else{ //else show nothing
echo "";
}
for($i =1; $i <= $this->show; $i++) // show ($show) links
{
if($this->p > $this->totalpages){ // if p is greater then totalpages then display nothing
echo "";
}
else if($_GET["p"] == $this->p){ //if p is equal to the current loop value then dont display that value as link
echo $this->p ;
}
else{
echo " <a href=?p=".$this->p."> ( ".$this->p.") </a>"; // else display the rest as links
}
$this->p++; //increment $p
}
echo "....."; // display dots
if($_GET["p"] == $this->totalpages){// if page is equal to totalpages then dont display the last page at the end of links
echo "";
}
else // else display the last page link after other ones
{
echo "<a href=?p=".$this->totalpages."> ( ".$this->totalpages.") </a>";
}
if($_GET["p"] < $this->totalpages)// if p is less then total pages then show next link
{
$next = $_GET["p"] + 1;
echo "<a href=?p=$next> [ NEXT >] </a>";
}
echo "<br><br>";
}
}
$page= new pagination;
$page->connect("host","username","password","dbname");
$page->setMax(25);
$page->setData("tablename");
$page->display();
$page->displayLinks(5);
}
?> Note that I'm not an OOP wizard, but hopefully these tips will help you and if someone disagrees, let me know.
- What version of PHP are you using? Because I've noticed that you're still using the var.
- You must sanitize your data ($_GET['p']) before executing a query (see below). Either use mysql_real_escape_string() or make up a regular expression to weed out all non-numbers.
- It'd be neat if you modified the class to support method chaining.
For example:
PHP Code:
$page= new pagination;
$page->connect("host","username","password","dbname");
$page->setMax(25)
->setData("tablename")
->display()
->displayLinks(5)
- I'm anal about standards, but you should replace <br> with <br />
discuss this topic to forum
