Mega Code Archive

 
Categories / Php / Site Navigation
 

An easy page browser ( prev 6 7 8 9 10 next )

<? 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 = "&nbsp;<< Prev ".$numLimit."&nbsp;"; //You can either have an image or text, eg. Previous $rarrow = "&nbsp;Next ".$numLimit." >>&nbsp;"; //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 :) */ ?>