This function returns an array of 3 values that makes browsing through your SQL results, or any other list of results, very easy. The navigation bar looks very similar to ones used in most sites [ prev 6 7 8 9 10 next ]. You can limit the amount of rows displayed, the amount of page numbers to display, the previous and next buttons/text. etc.
By : vicus
<?
/*
******************************
* Easy Result Navigator 1.3 *
******************************
Author: Wikus Stander
wikus[at]iamdev[dot]com
http://www.iamdev.com
_ __
(_)__ ___ _ ___/ /__ _ __ _______ __ _
/ / _ `/ ' \/ _ / -_) |/ /_ / __/ _ \/ ' \
/_/\_,_/_/_/_/\_,_/\__/|___/(_)\__/\___/_/_/_/
Copyright:
You may use this function freely. I hope you will
respect the author's intellectual property by:
- keeping this notice in your source, and
- dropping the author a mail: wikus[at]iamdev[dot]com
Thanx.
-------
Changes
-------
01-09-2003: In my example I rather suggest using the COUNT(*) function in the first
SQL query instead of mysql_num_rows(). This would make it return the 'totalrows'
value much faster, especially when there are lots of rows to return..
17-02-2003: Fixed a few bugs when using the next previous links (It would forget the
mysql limit position, etc.) I've removed an argument (start), and you cannot click
on the current selected page anymore. So a few less lines of code and arguments
that makes all the difference. enjoy :)
22-01-2003: Changed variables used in the example at the end of this document to
the global $_GET array. I found most users are running php with register_globals
turned off (php.ini). Thanx Tim Noble for the email :)
-----
To Do
-----
I've had some requests for making it support MSSQL (MSSQL doesn't support the LIMIT
clause) But I'm sure there is a way to get around it :) Keep checking this page...
-----------
Description
-----------
The function returns an array of 3 values as described below:
VALUE 1 [0]: Returns a string that can be appended to your SQL query so that the
correct block of rows can be returned. Eg. " LIMIT 10, 20"
VALUE 2 [1]: Returns an html string that gives the user an indication of which rows
he's currently browsing. Eg. 11-20
VALUE 3 [2]: Returns an html navigation bar needed for navigating through the total
result returned Eg. Page: << 6 7 8 9 10 >>
---------
Arguments
---------
The first 4 arguments are declared/assigned by you while the last 3 are done when
you start using the navigation bar generated by the function (See 'Usage' below).
totalrows - The TOTAL amount of rows returned by your executed SQL statement
numLimit - The amount of page numbers you'd like displayd in your navigation bit
Eg. '4' would display "Page: 1 2 3 4 Next 4 >>"
amm - The amount of rows returned per page (for the SQL string to append)
queryStr - If you'd like extra vars to be passed to that page Eg. "&name=value"
There are also 3 variables inside the function you can change if you'd like the
navigation bar to look a little different (larrow,rarrow,wholePiece).
-----
Usage
-----
See 'Usage' at the end of this document.
*/
function pageBrowser($totalrows,$numLimit,$amm,$queryStr,$numBegin,$begin,$num) {
$larrow = " << Prev ".$numLimit." "; //You can either have an image or text, eg. Previous
$rarrow = " Next ".$numLimit." >> "; //You can either have an image or text, eg. Next
$wholePiece = "Page: "; //This appears in front of your page numbers
if ($totalrows > 0) {
$numSoFar = 1;
$cycle = ceil($totalrows/$amm);
if (!isset($numBegin) || $numBegin < 1) {
$numBegin = 1;
$num = 1;
}
$minus = $numBegin-1;
$start = $minus*$amm;
if (!isset($begin)) {
$begin = $start;
}
$preBegin = $numBegin-$numLimit;
$preStart = $amm*$numLimit;
$preStart = $start-$preStart;
$preVBegin = $start-$amm;
$preRedBegin = $numBegin-1;
if ($start > 0 || $numBegin > 1) {
$wholePiece .= "<a href='?num=".$preRedBegin
."&numBegin=".$preBegin
."&begin=".$preVBegin
.$queryStr."'>"
.$larrow."</a>\n";
}
for ($i=$numBegin;$i<=$cycle;$i++) {
if ($numSoFar == $numLimit+1) {
$piece = "<a href='?numBegin=".$i
."&num=".$i
."&begin=".$start
.$queryStr."'>"
.$rarrow."</a>\n";
$wholePiece .= $piece;
break;
}
$piece = "<a href='?begin=".$start
."&num=".$i
."&numBegin=".$numBegin
.$queryStr
."'>";
if ($num == $i) {
$piece .= "</a><b>$i</b><a>";
} else {
$piece .= "$i";
}
$piece .= "</a>\n";
$start = $start+$amm;
$numSoFar++;
$wholePiece .= $piece;
}
$wholePiece .= "\n";
$wheBeg = $begin+1;
$wheEnd = $begin+$amm;
$wheToWhe = "<b>".$wheBeg."</b> - <b>";
if ($totalrows <= $wheEnd) {
$wheToWhe .= $totalrows."</b>";
} else {
$wheToWhe .= $wheEnd."</b>";
}
$sqlprod = " LIMIT ".$begin.", ".$amm;
} else {
$wholePiece = "Sorry, no records to display.";
$wheToWhe = "<b>0</b> - <b>0</b>";
}
return array($sqlprod,$wheToWhe,$wholePiece);
}
/*
+-------+
| Usage |
+-------+
NOTE!: This is just an example and WON'T WORK if you include
this in your code, comment it out or delete it :)
*/
$criterea = " WHERE column=value AND column_2=value_2";
$sql = "SELECT COUNT(*) AS totalrows FROM table".$criterea;
//get the total amount of rows returned
$arr = mysql_fetch_array(mysql_query($sql));
/*
Call the function:
I've used the global $_GET array as an example for people
running php with register_globals turned 'off' :)
*/
$navigate = pageBrowser($arr[totalrows],10,10,"&name=value",$_GET[numBegin],$_GET[begin],$_GET[num]);
//execute the new query with the appended SQL bit returned by the function
$sql = "SELECT * FROM table".$criterea.$navigate[0];
$rs = mysql_query($sql);
//the indication of which rows are being browsed. Eg. listing 1-10 of 100 results.
echo "<p>Listing ".$navigate[1]." of ".$totalrows." results.</p>";
//the navigation bar returned by the function
echo "<p>".$navigate[2]."</p>";
//loop and display the limited records being browsed
while ($arr = mysql_fetch_array($rs)) {
echo $arr[column_1]." ".$arr[column_2]."<br>";
}
//the navigation bar at the bottom again
echo "<p>".$navigate[2]."</p>";
/*
I hope this can come in handy :)
*/
?>
| DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware. |
More Site Navigation Code Articles
More By Codewalkers
developerWorks - FREE Tools! |
You probably have thousands of lines of COBOL code loaded with business intelligence and being used to run your business, along with an army of developers maintaining these applications. Learn how to prepare your applications and developers so you can keep that competitive edge and move to a service-oriented architecture with the IBM Rational Enterprise Modernization solutions. Replay is available for 9 months. FREE! Go There Now!
|
|
|
|
Visit IBM developerWorks to download a free trial version of IBM Rational Business Developer V7.1. Rational Business Developer offers rapid and simplified development of business applications and services through Enterprise Generation Language (EGL) tools, generating Java or mainframe solutions while shielding developers from technical complexities. FREE! Go There Now!
|
|
|
|
Learn how Rational Build Forge can extend a simple compile and package build process by adding customization and deployment capability. Go from a manual method to automating: checking for code changes; getting the latest source; compiling and packaging; customizing; copying to and restarting a deployment server; and sending e-mail notification that a new version is available. FREE! Go There Now!
|
|
|
|
Listen to this webcast to get an overview of Info 2.0 and a technical demo of how to quickly build an enterprise mashup. IBM's Info 2.0 technology leverages emerging Web 2.0 technologies such as mashups, feeds, AJAX, and JSON in order to simplify assembly of information using feeds and services. Come learn about the technical elements of Info 2.0 including the Feed Generation framework, Mashup Engine, and mashup assembly components. Learn how to pull information from databases, departmental information, and the Web to create mashups critical to your company’s success. We will also discuss best practices to help you get started. FREE! Go There Now!
|
|
|
|
Ken Krugler, co-founder of code search company Krugle, and Laura Merling, vice president of Marketing and Business Development for Krugle, join to talk about the ins and outs of code search and what it means as a new feature for developerWorks users. FREE! Go There Now!
|
|
|
|
Rational Modeling Extension for Microsoft .NET enhances usability for code generation supporting a more intelligent refactoring. The latest enhancements enable organizations with Java and .NET systems and software development maintain architectural integrity across heterogeneous platforms. FREE! Go There Now!
|
|
|
|
Join this Rational Talks to You teleconference on December 4 at 1:00 pm ET to discuss how Rational Method Composer can help meet your compliance objectives. Get your questions answered! FREE! Go There Now!
|
|
|
|
As organizations have grown increasingly dependent on online software, the risk of malicious attacks has also become far more serious. Fortunately, well-governed organizations can protect their Web applications by injecting vulnerability assessments and ethical hacks into their software development and delivery processes. This paper describes 12 of the most common hacker attacks and provides basic rules that you can follow to help create more hack-resistant Web applications. FREE! Go There Now!
|
|
|
|
Informix Dynamic Server (IDS) Express Edition offers outstanding online transaction processing (OLTP) database performance, while helping to simplify and automate many of the tasks associated with deploying databases for small business applications. IDS 11 further extends the ease of management and applications integration with the Admin API and Scheduler, high availability with Continuous Log Restore for backup server recovery in case of a primary server failure, and column level encryption to protect personal and company private data. FREE! Go There Now!
|
|
|
|
Join this webcast to learn how IBM Rational's Functional Testing solution enables you to implement automation your way, at your pace, with your existing staff. In this webcast, you’ll learn how you can eliminate redundancy of manual test scripts, reduce errors, and increase test coverage through test automation. After this presentation you will understand how IBM Rational Functional Testing solution can streamline your manual testing and make test automation easily attainable. FREE! Go There Now!
|
|
|
|
All FREE IBM® developerWorks Tools! |