mick_otoole Posted August 3, 2006 Share Posted August 3, 2006 Hey all, this is my first post here so be gentle!I'm working with a database that has a list of companies in it. When the user authenticates he/she is given a list of all companies in the database. There is a search box whereby a user can search for specific companies. The problem that I'm having is that if there are more than 20 matches for a search string a <Next> button appears on the bottom of the page. When the user clicks on the next button the page that is displayed is not related to the original search query. I was wondering if anyone can help me out on how to display only relevant results on the <Next> page. Here's my code:[code]/* $Id: PageName.php,v 1.46 2006/08/03 12:40:41 Mick Exp $<?phpsession_start() ;require_once 'DB.php';require_once 'functions.inc';require_once 'HTMLGenerator.php';require_once 'Client.inc';require_once 'Order.inc';require_once 'Constants.inc';require_once $path_required_scripts.'Bizunit.inc';$_SESSION['menu_to_display'] = 'clients';pull_from_get('deleteclient','clientid','start','created');pull_from_post('filter','form_clientname','form_filterbizunit');pull_from_session('os_session_user_id');if (!isset($os_session_user_id) || $os_session_user_id == NULL || $os_session_user_id == -1) header('Location: index.php');foreach(array("form_clientname","filter","form_filterbizunit") as $variable) if (!isset($$variable)) $$variable = "";$params = array();$strFeedback = "";if (!isset($start)) $start = 0;$display = $listdisplay;$prev_value = $start - $display;$next_value = $start + $display;$recordCount = $display+1;$showPrevNext = 'false';//if "company" logged in, display all clients, else only clients for this resellerif ($os_session_user_id == 1000) $reseller = "";else $reseller = " and u.reseller_id = ".$os_session_user_id;$strSelect = 'Select u.* from user u, client_information c where c.user_id = u.user_id and c.client_account_activated = 1 '.$reseller .' limit '. $start . ',' . $display;if (isset($filter) && $filter == 'Search'){ //$strSelect = "select * from client_information where client_company_name like ? or client_last_name like ?or client_first_name like ?"; $strTmp = "'%" . $form_clientname . "%'"; $bizunitsql=""; if((isset($form_filterbizunit)) && (!($form_filterbizunit==-1))) { $bizunitsql=" and c.bizunit=$form_filterbizunit"; }; $strSelect = "select c.* from client_information c, user u where c.user_id=u.user_id and c.client_account_activated = 1 and (u.username like ".$strTmp . " or c.client_company_name like " . $strTmp . " or c.client_last_name like " . $strTmp . " or c.client_first_name like " . $strTmp . ")".$reseller . $bizunitsql . " limit ". $start . "," . $display; $res1 =& getRecordSetMessengerDB("select count(*) from client_information c, user u where c.user_id = u.user_id and (c.client_company_name like " . $strTmp . " or c.client_last_name like " . $strTmp . " or c.client_first_name like ". $strTmp.") ".$reseller, $params); $row =& $res1->fetchRow(); $recordCount = $row[0]; //echo $strSelect; if ($recordCount > $display) $showPrevNext = 'true'; //$params = array($form_filterorderid); //$params = array("%" . $form_clientname . "%","%" . $form_clientname . "%","%" . $form_clientname . "%","%". $form_clientname . "%");}if (isset($deleteclient) && $deleteclient == 'true'){ $client = new Client(); $client->deleteClient($clientid);}if (isset($created) && $created == 'new'){ $strFeedback = "Client and Client Account have been created successfully";}PrintHeader("OrderSystem -- Client Overview");PrintLayoutTop("Client List", "Click on a Client Name to view the details", $os_session_user_id);if ($strFeedback != "") echo '<div align=center><span class = "blue11">'.$strFeedback.'</span></div><br>';?><form method="post" action="PageName.php"><br><table border = 1 rules = none width = 50% align = center><tr> <td class=bold_text>Client Search</td> <td><input name="form_clientname" size = 13 value="<?php echo $form_clientname; ?>"></td></tr> <tr> <th class="bold_text" align=left>Biz Unit</th> <th class="bold_text" align=left> <select name=form_filterbizunit><option value='-1'></option> <?php $bizunit = new Bizunit(); $bizunits = $bizunit->getBizunitIDList(); for ($i=0; $i < count($bizunits); $i++) { $strSelected = ""; if ($bizunits[$i]==$form_filterbizunit) { $strSelected=" SELECTED "; }; $bizunit = new Bizunit($bizunits[$i]); echo '<option value=' . $bizunits[$i] . ' ' . $strSelected.'>' . $bizunit->getBizunitName() . '</option>'; } ?> </select></th> <th class="bold_text" align=left><input type="submit" name="filter" value="Search"></th> </tr></table></form><br><?php $res =& getRecordSetMessengerDB($strSelect, $params); ?> <table width= 100% border="1" rules = rows class="text" align="left"> <tr> <th class=greybg align="left">Username</th> <th class=greybg align="left">Company</th> <th class=greybg ></th> <th class=greybg ></th> </tr> <?php $i = 0; while ($row =& $res->fetchRow()) { $strBackground = ""; $user = new Client($row[0]); ?> <tr <?php echo $strBackground; ?> > <td> <a title = "Edit Client" href= "EditClient.php?<?php echo "clientid=" . $row[0] ?>"> <?php echo $user->getClientUsername(); ?> </a> </td> <td> <?php echo $user->getClientCompanyName(); ?> </td> <td> <a title="display client's orders" href = "OrderOverview.php?<?php echo "clientid=" . $row[0] ?>">get orders</a> </td> <td> <a title="Delete Client" href= "PageName.php?<?php echo "deleteclient=true&clientid=" . $row[0] ?>" >x</a> </td> </tr> <?php } ?> </table> <div style = "color:white">a</div> <table width=100%> <tr> <td width=90%></td> <td width=10%> <?php if (($recordCount > $display) || ($showPrevNext == 'true')) { if ($start > 0) { ?> <a href = "PageName.php?start=<?php echo $prev_value;?>"> prev </a> <?php } ?> </td> <td> <a href = "PageName.php?start=<?php echo $next_value;?>"> Next </a> <?php } ?> </td> </tr> </table><?phpPrintLayoutBottom();PrintFooter();?>[/code]I hope this explains properly what I'm trying to do.Thanks in advance for any help that you can give me.Mick Quote Link to comment Share on other sites More sharing options...
mick_otoole Posted August 3, 2006 Author Share Posted August 3, 2006 I've seen this in a few other posts on this forum but no one has answered those posts either. Please Please can someone please help with this query.Thanks in advance.Mick Quote Link to comment Share on other sites More sharing options...
mick_otoole Posted August 3, 2006 Author Share Posted August 3, 2006 I can see from the code [code]if (!isset($start)) $start = 0;$display = $listdisplay;$prev_value = $start - $display;$next_value = $start + $display;$recordCount = $display+1;$showPrevNext = 'false';[/code]That the next button will just take the start and add on the $listdisplay basically abandoning the search query completely. I'm still trying to figure out how to pass the query through the next button. Anyone ??? Please? I'm going frigging nuts trying to figure this out! Quote Link to comment Share on other sites More sharing options...
onlyican Posted August 3, 2006 Share Posted August 3, 2006 have your query search in the address bar using the GET methodalso have the page number[code=php:0]if(!issit($_GET["page"])){$page = 1;}else{$page = $_GET["page"];}$max_results = 10; //Change to what you wish$from = (($page * $max_results) - $max_results);//Add this to the end of the query//LIMIT ".$from.", ".$max_results;//Now the page numbering$total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM table WHERE" //Make same as your query, except the limit and the beginning is COUNT(*) as Num$total_pages = ceil($total_results / $max_results);if($total_pages > 1){echo "Select a Page\n"; if($page > 1){ $prev = ($page - 1); echo "<a href='".$_SERVER['PHP_SELF']."?page=".$prev."&search=".$search_string."'>&alt;&alt; Prev[/url] \n"; } for($i = 1l $i <= $total_pages; $i++){ if(($page) == $i){ echo $i." "; }else{ echo "<a href='".$_SERVER['PHP_SELF']."?page=".$i."&search=".$search_string."'>".$i."[/url] \n"; } } if($page < $total_pages){ $next = ($page + 1); echo "<a href='".$_SERVER['PHP_SELF']."?page=".$next."&search=".$searchString."'>Next >>[/url]\n"; } }[/code] Quote Link to comment Share on other sites More sharing options...
Ninjakreborn Posted August 3, 2006 Share Posted August 3, 2006 I am working on this myself today. I am creating something my self, It's called pagination, the reason it's displaying another search is you have to limit the search with LIMIT 50on the first one, then record 51 in a variable, then you can passit back to the same query and dynamically change those toLIMIT 50, 51then record 101 in a variable and refeed itLIMIT 50, 101 then just keep going like that, it'll update the query each tiem, the minor technical issues I am ironing out on mine as well to keep updated on hte progress you'll see a recent post with me talking to myself awhile getting help on something and talking to myself again. Quote Link to comment 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.