Forum Moderators: coopster

Message Too Old, No Replies

Pagination Problem

         

jamesgloo

7:53 am on Apr 21, 2011 (gmt 0)

10+ Year Member



Hi Guys

Im quite a PHP newbie. I have written this script to pull data from the database and paginate it but im not too sure if I have done this correctly as I am getting this error as well as im not too sure if the echo and printing of the data is done correctly? Could anyone possibly help me?

This is the code :)


<?php
require_once('wp-content/plugins/puma-leaderboard/connection.inc.php');
// connect to MySQL

//This checks to see if there is a page number. If not, it will set it to page 1

if (!(isset($pagenum)))

{

$pagenum = 1;

}

$result = mysql_query("SELECT * FROM wp_puma_leaderboard ORDER BY time DESC") or die(mysql_error());
$rows = mysql_num_rows($result);

//This is the number of results displayed per page

$page_rows = 10;

//This tells us the page number of our last page

$last = ceil($rows/$page_rows);

//this makes sure the page number isn't below one, or more than our maximum pages

if ($pagenum < 1)

{

$pagenum = 1;

}

elseif ($pagenum > $last)

{

$pagenum = $last;

}

//This sets the range to display in our query

$max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows;

//This is your query again, the same one... the only difference is we add $max into it

$data_p = mysql_query("SELECT * FROM wp_puma_leaderboard ORDER BY time DESC $max") or die(mysql_error());

while($info = mysql_fetch_array( $data_p ))

{

Print $info['time'];

echo "<table cellspacing='4' cellpadding='4' style='border: 2px solid #333331; width: 678px;'>
<tr>
<th>&nbsp;</th>
<th>&nbsp;</th>
</tr>";

$posCounter = 0;

function setPos($val)
{
$rVal = "";

if (strlen($val) == 1)
$rVal = "00" . $val;
else if (strlen($val) == 2)
$rVal = "0" . $val;
else
$rVal = $val;

return $rVal;
}



while($row = mysql_fetch_array($result))
{
$posCounter++;
echo "<tr>";

echo "<td class='leaderboard_td_pos'>" . setPos($posCounter) . "</td>";

echo "<td class='leaderboard_td_time'>" . $row['time'] . "</td>";
echo "<td class='leaderboard_td_name'>" . $row['name'] . "</td>";
echo "<td class='leaderboard_td_school'>" . $row['school'] . "</td>";
echo "</tr>";

}
echo "</table>";

}

echo "<p>";

// This shows the user what page they are on, and the total number of pages

echo " --Page $pagenum of $last-- <p>";


// First we check if we are on page one. If we are then we don't need a link to the previous page or the first page so we do nothing. If we aren't then we generate links to the first page, and to the previous page.

if ($pagenum == 1)

{

}

else

{

echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=1'> <<-First</a> ";

echo " ";

$previous = $pagenum-1;

echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$previous'> <-Previous</a> ";

}


//just a spacer

echo " ---- ";


//This does the same as above, only checking if we are on the last page, and then generating the Next and Last links

if ($pagenum == $last)

{

}

else {

$next = $pagenum+1;

echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> ";

echo " ";

echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> ";

}


?>

Matthew1980

4:32 pm on Apr 21, 2011 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Hi there Jamesgloo,

Firstly, welcome to the forums!

Secondly; pagination has been delt with a lot over the years on this forum, and there are loads of decent freebie scripts and tutorials out there. This particular [webmasterworld.com] thread I am sure has helped lots of people out. I certatinly learnt from it.

The script that you have posted looks like it is defaulting to using registered globals 'off' as I can't see how you're getting the information from the url..

When your checking for data coming through the URL, you should firstly check to see that it is set, and ensure that it is numerical, then if it is use it; if not, disgard it. Something like this:-

<?php
if (isset($_GET['page']) && !empty($_GET['page']) && is_numeric($_GET['page'])){
//assign the variable and clease it
$PageNum = (int)$_GET['page'];
//I started to use GoTo's now as I find them useful
GoTo Process
}
else{
//show a suitable fail message and send back to original page, after a short delay :)
echo "That didn't seem to be a valid page number, please try again";
sleep(5);
header("location: index.php");
exit;
}

Process:
//incoming data is correct, carry on with the script.

?>

This is just an example of the many ways that area available to do this sort of thing, hopfully you can extract some decent information from that link.

Have fun coding.

[EDIT]Haha, almost forgot; Thirdly, what is the error message that you're getting when you run the script?

Cheers,
MRb