FreakOn Posted July 9, 2006 Share Posted July 9, 2006 Hi All, I wish to thank anybody willing to help with my problem.I have been scratching my head for days now and wish to put this to bed so maybe I can join it...!The Problem++++++++++Connecting to database and collecting results is not a problem, but attempting to paginate the results and then disply the returned results (product info) is a problem. Some searches can return upto 2000 results, with most returning +200 to 700 so the pages need paginating.So far the pagination appears to be working OK, but now I cannot get the product info to display on the page. $content is the display to the page.Any Help much appreciated.My Code+++++++[code]<?php/*################################# Image Pop-Up Loader#################################*/$content='<script type="text/javascript" src="assets/javascripts/image.js"></script> ';/*###################################### Connect to the Database######################################*/$db = new dblib;$db->connect_host(DB_SERVER, DB_USER, DB_PASS);/*##################################### Store the Search Choice in the user session Dependent on the Method used -> $_GET or $_POST#####################################*/if($_GET){ if($_GET[gender]){ $_SESSION[st]='pr_sex'; $_SESSION[sc]=strtoupper($_GET[gender]); } if($_GET[range]){ $_SESSION[st]='pr_type'; $_SESSION[sc]=strtoupper($_GET[range]); }}if($_POST){ if($_POST[st]=="house"){ $_SESSION[st]='pr_house'; $_SESSION[sc]=strtoupper($_POST[house]); $_SESSION[maxresults]=$_SESSION[maxresults]; }else{ if($_POST[showresults]){ $_SESSION[maxresults]=$_POST[showresults]; $_SESSION[st]=$_SESSION[st];//'pr_house' $_SESSION[sc]=$_SESSION[sc]; }else{ $_SESSION[st]='pr_house'; $_SESSION[sc]=''; $_SESSION[maxresults]=$_SESSION[showresults]; } }}/*########################################### First Printed Page Element###########################################*/ /*############################## PAGINATION SCRIPT ##############################*/ /*############################### Set current, prev and next page ###############################*/ $page = (!isset($_GET['page']))? 1 : $_GET['page']; $prev = ($page - 1); $next = ($page + 1); /*#################### Max results per page ####################*/ if(!$_SESSION[maxresults]){ $max_results = 25; }else{ $max_results = $_SESSION[maxresults]; } $maxresultsf=' <select name="showresults" onchange=maxresults.submit()> <option value="">select</option> <option value="5">5</option> <option value="10">10</option> <option value="15">15</option> <option value="20">20</option> <option value="25">25</option> <option value="30">30</option> <option value="35">35</option> <option value="40">40</option> <option value="45">45</option> <option value="50">50</option> <option value="75">75</option> <option value="100">100</option> <option value="150">150</option> <option value="200">200</option> </select>'; /*#################### Calculate the offset ####################*/ $from = (($page * $max_results) - $max_results); /*################################## POSSIBLE PROBLEM ##################################*/ $str_SQL="SELECT * FROM pr_list WHERE freestock > 0 AND ".$_SESSION[st]."='".$_SESSION[sc]."'";/* echo '<br /><br />'; echo ' Just Echoing to fault find<br />'; echo ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br /> '; echo $str_SQL.'<br /> ';*/ $result=$db->query_db("$dbconn",$str_SQL); $total_results = mysql_num_rows($result); $total_pages = ceil($total_results / $max_results); $pagination = '<div id="pagination">'; /*################################## Create a PREV link if there is one ##################################*/ if($page > 1){ $pagination .= '<a href="?st='.$_GET[st].'&sc='.$_SESSION[sc].'&page='.$prev.'" class="pagination"><< Previous</a>'; } /*############################ Loop through the total pages ############################*/ if($page > 1){ // Slip a dash - into the display if page number = more than 1 $slipin=' - '; } for($i = 1; $i <= $total_pages; $i++){ if(($page) == $i){ $pagination .= ''.$slipin.''.$i.''; }else{ $pagination .= ' - <a href="?st='.$_GET[st].'&sc='.$_SESSION[sc].'&page='.$i.'" class="pagination">'.$i.'</a>'; } } /*############################### Print NEXT link if there is one ###############################*/ if($page < $total_pages){ $pagination .= ' - <a href="?st='.$_GET[st].'&sc='.$_SESSION[sc].'&page='.$next.'" class="pagination">Next >></a>'; } /*########################################################### Now we have our pagination links in a variable($pagination) ready to print to the page. I put it in a variable because you may want to show them at the top and bottom of the page ###########################################################*/ /*##################################### Below is how you query the db for ONLY the results for the current page #####################################*/ //$result=mysql_query("select * from pr_list LIMIT $from, $max_results "); if($_GET[page]){ // REMOVED --> ORDER by pr_type ASC $result=mysql_query("SELECT * FROM pr_list WHERE ".$_SESSION[st]."='".$_SESSION[sc]."' AND freestock > 0 LIMIT $from, $max_results"); }else{ $result=mysql_query("SELECT * FROM pr_list WHERE ".$_SESSION[st]."='".$_SESSION[sc]."' AND freestock > 0 LIMIT $from, $max_results"); } if($_GET[sc]){ $thissc=$_GET[sc]; }else{ $thissc=$_SESSION[sc]; } // Close the Pagination and add a <p> to // keep firefox seperated from the results // IE seperates OK without the <p> (bugger) $pagination .= '</div><p> </p>'; /*######################### Start returning the results #########################*/ if(mysql_num_rows($result)>0){ /*################## ADDED ##################*/ $thisbrand=$rows[pr_brand]; if($total_results > 1){ $thes='s'; }else{ $thes=''; } if($total_results > $max_results){ $pagination=$pagination; }else{ $pagination=''; } $fromhowmany=$from + 1; $tohowmany=$from + $max_results; $content.='<strong>'.$_SESSION[sc].' Product Range</strong> ('.$total_results.' product'.$thes.' found - showing product '.$fromhowmany.' to '.$tohowmany.')<br /><br /> <form name="maxresults" method="post" action="search.'.$fext.'"> '.$maxresultsf.' Number of products per page ('.$max_results.')</form><br /> '.$pagination.''; // Populate the Fields $ptname=$rows[pr_desc]; while($i = mysql_fetch_array($result)){ $content.=' <blockquote id="searchreturn"> <div id="imbor">'.$primage.'</div><strong>'.$ptname.' '.$rows[pr_desc2].'</strong> <blockquote> <strong>brand:</strong> '.ucwords(strtolower($rows[pr_brand])).'<br /><br /> <strong>category:</strong> '.ucwords(strtolower($rows[pr_type])).' - '.ucwords(strtolower($rows[pr_sex])).'<br /><br /> <strong>price:</strong> £ '.$unitprice.' <div align="right"><a href="productorder.'.$fext.'?product='.base64_encode($rows[stockcode]).'" title="Order this product"><img src="assets/images/button_order.gif" alt="order" class="imgmiddle" align="right"></a></div> <p> </p> </blockquote> </blockquote>'; } $content.=' ('.$max_results.' items per page, '.$total_results.' '.$_SESSION[sc].' product'.$thes.' found - showing product '.$fromhowmany.' to '.$tohowmany.')<br /><br /> '.$pagination.''; }?>[/code] Quote Link to comment https://forums.phpfreaks.com/topic/14124-problem-mixing-pagination-with-search-results/ Share on other sites More sharing options...
willfitch Posted July 10, 2006 Share Posted July 10, 2006 Hey FreakOn,Honesly, I don't want to read through your code. :D Here is a pagination class that will allow you to specify parameters and easily paginate without hassle:[code=php:0]class Pagination { public $currentPage, $itemCount, $itemsPerPage, $linksHref, $linksToDisplay; public $pageJumpBack, $pageJumpNext, $pageSeparator; public $queryString, $queryStringVar; /* void (int current page) */ public function setCurrentPage($reqCurrentPage){ $this->currentPage = (integer) abs($reqCurrentPage); } // end setCurrentPage /* void setItemCount(int item count) */ public function setItemCount($reqItemCount){ $this->itemCount = (integer) abs($reqItemCount); } // end setItemCount /* void setItemsPerPage(int items per page) */ public function setItemsPerPage($reqItemsPerPage){ $this->itemsPerPage = (integer) abs($reqItemsPerPage); } // end setItemsPerPage /* void setLinksHref(string hyperlink) */ public function setLinksHref($reqLinksHref){ $this->linksHref = $reqLinksHref; } // end setLinksHref /* void setLinksFormat(string "Go Back", string seperator, string "Next") */ public function setLinksFormat($reqPageJumpBack, $reqPageSeparator, $reqPageJumpNext){ $this->pageJumpBack = $reqPageJumpBack; $this->pageSeparator = $reqPageSeparator; $this->pageJumpNext = $reqPageJumpNext; } // end setLinksFormat /* void setLinksToDisplay(int links to display) */ public function setLinksToDisplay($reqLinksToDisplay){ $this->linksToDisplay = (integer) abs($reqLinksToDisplay); } // end setLinksToDisplay /* void setQuerySTringVar(string query string variable) */ public function setQueryStringVar($reqQueryStringVar){ $this->queryStringVar = $reqQueryStringVar; } // end setQueryStringVar /* void setQueryString(string query string) */ public function setQueryString($reqQueryString){ $this->queryString = $reqQueryString; } // end setQueryString /* array getCurrentCollection(array collection) STILL IN DEVELOPMENT!!! */ public function getCurrentCollection($reqCollection){ if($this->currentPage < 1){ $start = 0; } elseif($this->currentPage > $this->getPageCount()){ $start = $this->getPageCount() * $this->itemsPerPage - $this->itemsPerPage; } else { $start = $this->currentPage * $this->itemsPerPage - $this->itemsPerPage; } // end else return array_slice($reqCollection, $start, $this->itemsPerPage); } // end getCurrentCollection /* int getPageCount(void) */ public function getPageCount(){ return (integer)ceil($this->itemCount/$this->itemsPerPage); } // end getPageCount /* string getPageLinks(void) */ public function getPageLinks(){ $strLinks = ''; $pageCount = $this->getPageCount(); $queryString = $this->getQueryString(); $linksPad = floor($this->linksToDisplay/2); if($this->linksToDisplay == -1){ $this->linksToDisplay = $pageCount; } // end if if($pageCount == 0){ $strLinks = $this->pageJumpBack.' 1 '.$this->pageJumpNext; } elseif($this->currentPage - 1 <= $linksPad || ($pageCount - $this->linksToDisplay + 1 == 0)) { $start = 1; } elseif($pageCount - $this->currentPage <= $linksPad) { $start = $pageCount - $this->linksToDisplay + 1; } else { $start = $this->currentPage - $linksPad; } // end else if(isset($start)) { if($start > 1) { if(!empty($this->pageJumpBack)) { $pageNum = $start - $this->linksToDisplay + $linksPad; if($pageNum < 1){ $pageNum = 1; } // end if $strLinks .= '<a href="'.$this->linksHref.$queryString.$pageNum.'">'; $strLinks .= $this->pageJumpBack.'</a>'.$this->pageSeparator; } // end if $strLinks .= '<a href="'.$this->linksHref.$queryString.'1">1...</a>'.$this->pageSeparator; } // end if if($start + $this->linksToDisplay > $pageCount) { $end = $pageCount; } else { $end = $start + $this->linksToDisplay - 1; } // end else for($i = $start; $i <= $end; $i ++){ if($i != $this->currentPage){ $strLinks .= '<a href="'.$this->linksHref.$queryString.($i).'">'; $strLinks .= ($i).'</a>'.$this->pageSeparator; } else { $strLinks .= $i.$this->pageSeparator; } // end else } // end for loop $strLinks = substr($strLinks, 0, -strlen($this->pageSeparator)); if($start + $this->linksToDisplay - 1 < $pageCount) { $strLinks .= $this->pageSeparator.'<a href="'.$this->linksHref.$queryString.$pageCount.'">'; $strLinks .= '...'.$pageCount.'</a>'.$this->pageSeparator; if(!empty($this->pageJumpNext)) { $pageNum = $start + $this->linksToDisplay + $linksPad; if($pageNum > $pageCount){ $pageNum = $pageCount; } // end if $strLinks .= '<a href="'.$this->linksHref.$queryString.$pageNum.'">'; $strLinks .= $this->pageJumpNext.'</a>'; } // end if } // end if } // end if return $strLinks; } // end getPageLinks /* string getQueryString(void) */ public function getQueryString(){ $pattern = array('/'.$this->queryStringVar.'=[^&]*&?/', '/&$/'); $replace = array('', ''); $queryString = preg_replace($pattern, $replace, $this->queryString); if(!empty($queryString)) { $queryString.= '&'; } // end if return '?'.$queryString.$this->queryStringVar.'='; } // end if public function getSqlLimit() { return ' LIMIT '.($this->currentPage * $this->itemsPerPage - $this->itemsPerPage).', '.$this->itemsPerPage; } // end getSqlLimit /* void __construct(void) */ public function __construct(){ $this->setCurrentPage(1); $this->setItemsPerPage(20); $this->setItemCount(0); $this->setLinksFormat('« Back',' • ','Next »'); $this->setLinksHref($_SERVER['PHP_SELF']); $this->setLinksToDisplay(5); $this->setQueryStringVar('page'); $this->setQueryString($_SERVER['QUERY_STRING']); if(isset($_GET[$this->queryStringVar]) && is_numeric($_GET[$this->queryStringVar])){ $this->setCurrentPage($_GET[$this->queryStringVar]); } // end if } // end construct} // end class[/code]-- Will http://www.phpfever.com/ Quote Link to comment https://forums.phpfreaks.com/topic/14124-problem-mixing-pagination-with-search-results/#findComment-55385 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.