| | |||||||
| |||||||
| |||||||
|
|
|
|
|
|
|
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 :) */ ?>
More Site Navigation Code Articles |
| |
| |