gnawz Posted September 2, 2008 Share Posted September 2, 2008 Hi experts, Iam designing a system with a couple of files. There is a functions file (functions.php) which contains all functions Files for each module are stored in a folder Each module has an index page which iterates gthe functions to be performed. My functions file (functions.php) which contains the pagination function at the bottom <? /* This file contains all functions to be used in the stock system*/ ini_set('display_errors', 'On'); //Error reporting error_reporting(E_ALL); // start the session session_start(); // database connection config $dbHost = 'localhost'; $dbUser = 'root'; $dbPass = ''; $dbName = 'cstockdb'; $errorMessage; //DB functions $dbConn = mysql_connect ($dbHost, $dbUser, $dbPass) or die ('MySQL connect failed. ' . mysql_error()); mysql_select_db($dbName) or die('Cannot select database. ' . mysql_error()); function dbQuery($sql) { $result = mysql_query($sql) or die(mysql_error()); return $result; } function dbAffectedRows() { global $dbConn; return mysql_affected_rows($dbConn); } function dbFetchArray($result) { return mysql_fetch_array($result); } function dbFetchAssoc($result) { return mysql_fetch_assoc($result); } function dbFetchRow($result) { return mysql_fetch_row($result); } function dbFreeResult($result) { return mysql_free_result($result); } function dbNumRows($result) { return mysql_num_rows($result); } function dbSelect($dbName) { return mysql_select_db($dbName); } function dbInsertId() { return mysql_insert_id(); } //End DB functions // setting up the web root and server root for // this application $thisFile = str_replace('\\', '/', __FILE__); $docRoot = $_SERVER['DOCUMENT_ROOT']; $webRoot = str_replace(array($docRoot, 'functions.php'), '', $thisFile); $srvRoot = str_replace('functions.php', '', $thisFile); define('WEB_ROOT', $webRoot); define('SRV_ROOT', $srvRoot); /* Make sure each key name in $requiredField exist in $_POST and the value is not empty */ function checkRequiredPost($requiredField) { $numRequired = count($requiredField); $keys = array_keys($_POST); $allFieldExist = true; for ($i = 0; $i < $numRequired && $allFieldExist; $i++) { if (!in_array($requiredField[$i], $keys) || $_POST[$requiredField[$i]] == '') { $allFieldExist = false; } } return $allFieldExist; } function queryString() { $qString = array(); foreach($_GET as $key => $value) { if (trim($value) != '') { $qString[] = $key. '=' . trim($value); } else { $qString[] = $key; } } $qString = implode('&', $qString); return $qString; } /* Put an error message on session */ function setError($errorMessage) { if (!isset($_SESSION['cstock_error'])) { $_SESSION['cstock_error'] = array(); } $_SESSION['cstock_error'][] = $errorMessage; } /* print the error message */ function displayError() { if (isset($_SESSION['cstock_error']) && count($_SESSION['cstock_error'])) { $numError = count($_SESSION['cstock_error']); echo '<table id="errorMessage" width="550" align="center" cellpadding="20" cellspacing="0"><tr><td>'; for ($i = 0; $i < $numError; $i++) { echo '• ' . $_SESSION['cstock_error'][$i] . "<br>\r\n"; } echo '</td></tr></table>'; // remove all error messages from session $_SESSION['cstock_error'] = array(); } } //User authentication functions function checkUser() { // if the session id is not set, redirect to login page if (!isset($_SESSION['cstockuserID'])) { header('Location: ' . WEB_ROOT . 'admin/login.php'); exit; } //The user wishes to logout if (isset($_GET['logout'])) { doLogout(); exit; } } function doLogout() { if (isset($_SESSION['cstockuserID'])) { unset($_SESSION['cstockuserID']); session_unregister('cstockuserID'); } header('Location: index.php'); exit; } function doLogin() { $userName = $_POST['txtUserName']; $password = $_POST['txtPassword']; $sql = "SELECT UserID FROM cstockusers WHERE UserName = '$userName' AND Password = PASSWORD('$password')"; $result = dbQuery($sql); if (dbNumRows($result) == 1) { $row = dbFetchAssoc($result); $_SESSION['cstockuserID'] = $row['UserID']; // log the time when the user last logged in $sql = "UPDATE cstockusers SET LastLogin = NOW() WHERE UserID = '{$row['UserID']}'"; dbQuery($sql); // now that the user is verified we move on to the next page // if the user had been in the admin pages before we move to // the last page visited if (isset($_SESSION['login_return_url'])) { $errorMessage = 'This is the page you visited last'; header('Location: ' . $_SESSION['login_return_url']); return $errorMessage; exit; } else { header('Location: index.php'); exit; } } else { $errorMessage = 'Wrong username or password. Please try again'; } return $errorMessage; } //Pagination functions function getPagingQuery($sql, $itemPerPage = 10) { if (isset($_GET['page']) && (int)$_GET['page'] > 0) { $page = (int)$_GET['page']; } else { $page = 1; } // start fetching from this row number $offset = ($page - 1) * $itemPerPage; return $sql . " LIMIT $offset, $itemPerPage"; } /* Get the links to navigate between one result page to another. */ function getPagingLink($sql, $itemPerPage = 10, $strGet = '') { $result = dbQuery($sql); $pagingLink = ''; $totalResults = dbNumRows($result); $totalPages = ceil($totalResults / $itemPerPage); // how many link pages to show $numLinks = 10; // create the paging links only if theres more than one page of results if ($totalPages > 1) { $self = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ; if (isset($_GET['page']) && (int)$_GET['page'] > 0) { $pageNumber = (int)$_GET['page']; } else { $pageNumber = 1; } // print 'previous' link only if its not // on page one if ($pageNumber > 1) { $page = $pageNumber - 1; if ($page > 1) { $prev = " <a href=\"$self?page=$page&$strGet/\">[Prev]</a> "; } else { $prev = " <a href=\"$self?$strGet\">[Prev]</a> "; } $first = " <a href=\"$self?$strGet\">[First]</a> "; } else { $prev = ''; // on page one, don't show 'previous' link $first = ''; // nor 'first page' link } // print 'next' link only if its not // on the last page if ($pageNumber < $totalPages) { $page = $pageNumber + 1; $next = " <a href=\"$self?page=$page&$strGet\">[Next]</a> "; $last = " <a href=\"$self?page=$totalPages&$strGet\">[Last]</a> "; } else { $next = ''; // if on the last page, don't show 'next' link $last = ''; // nor 'last page' link } $start = $pageNumber - ($pageNumber % $numLinks) + 1; $end = $start + $numLinks - 1; $end = min($totalPages, $end); $pagingLink = array(); for($page = $start; $page <= $end; $page++) { if ($page == $pageNumber) { $pagingLink[] = " $page "; // no need to create a link to current page } else { if ($page == 1) { $pagingLink[] = " <a href=\"$self?$strGet\">$page</a> "; } else { $pagingLink[] = " <a href=\"$self?page=$page&$strGet\">$page</a> "; } } } $pagingLink = implode(' | ', $pagingLink); // return the page navigation link $pagingLink = $first . $prev . $pagingLink . $next . $last; } return $pagingLink; } ?> I call the pagination function in a page where I need to use it Here is an example index page from my brands module (which is the default page of every module) It displays 5 items per page. <?php require_once '../../functions.php'; //$_SESSION['login_return_url'] = $_SERVER['REQUEST_URI']; checkUser(); $view = (isset($_GET['view']) && $_GET['view'] != '') ? $_GET['view'] : ''; switch ($view) { case 'list' : $content = 'list.php'; $pageTitle = 'Fragrance Lounge - Brand panel'; break; case 'modify' : $content = 'modify.php'; $pageTitle = 'Fragrance Lounge - Modify Brand'; break; case 'detail' : $content = 'detail.php'; $pageTitle = 'Fragrance Lounge - Showing Brand Details'; break; case 'showbybrand' : $content = 'showbybrand.php'; $pageTitle = 'Fragrance Lounge - Showing Brands By Brand'; break; case 'showbycategory' : $content = 'showbycategory.php'; $pageTitle = 'Fragrance Lounge - Showing Brands By Category'; break; case 'showbysearch' : $content = 'showbysearch.php'; $pageTitle = 'Fragrance Lounge - Showing Brands By Searching'; break; case 'choice' : if(isset($_POST["AddBrand"]) && trim($_POST["AddBrand"])!=='') { $content = 'add.php'; $pageTitle = 'Fragrance Lounge - Add Brand'; } elseif(isset($_POST["DeleteBrand"]) && trim($_POST["DeleteBrand"])!=='') { $content = 'delete.php'; $pageTitle = 'Fragrance Lounge - Delete Brand'; } break; default : $content = 'list.php'; $pageTitle = 'Fragrance Lounge - Brand panel'; } $script = array('brand.js'); require_once '../include/template.php'; ?> The above index page displays (list.php) as its default page. list.php below <?php if (!defined('WEB_ROOT')) { exit; } $rowsPerPage = 5; $sql = "SELECT * FROM cstockitems GROUP BY Brand"; $result = dbQuery(getPagingQuery($sql, $rowsPerPage)); $pagingLink = getPagingLink($sql, $rowsPerPage); ?> <form action="index.php?view=choice" method="post" name="frmList" id="frmList"> <table width="100%" border="0" align="center" cellpadding="2" cellspacing="1"> <tr class="title_text"> <td width="400">Brand</td> <td width="400">Category</td> <td width="400">Date Created </td> <td width="200">View</td> <td width="200">Modify</td> </tr> <?php if (dbNumRows($result) > 0) { $i = 0; while($row = dbFetchAssoc($result)) { extract($row); if ($i%2) { $class = 'row1'; } else { $class = 'row2'; } $i += 1; ?> <tr class="<?php echo $class; ?>"> <td width="400"><?php echo $Brand; ?></td> <td width="400"><?php echo $Category; ?></td> <td width="400"><?php echo $DateAddedBrand; ?></td> <td width="200"><a href="<?php echo $_SERVER['PHP_SELF']; ?>?view=detail&ProductID=<?php echo $ProductID; ?>">Details</a></td> <td width="200"><a href="javascript:modifyBrand(<?php echo $ProductID; ?>);">Modify</a></td> </tr> <?php } // end while ?> <tr> <td colspan="4" align="center"> <?php echo $pagingLink; ?> </td> </tr> <?php } else { ?> <tr> <td colspan="4" align="center">No brands yet</td> </tr> <tr> <td colspan="4" align="center"> </td> </tr> <?php } ?> <tr> <td colspan="4" align="right"> <input name="AddBrand" type="submit" value="Add" class="button_image"> <input type="submit" name="DeleteBrand" value="Delete" class="button_image"> </tr> </table> </form> <label class="title_text">View available brands:</label> <hr> <table width="100%" border="0"> <tr> <td><form action="index.php?view=showbybrand" method="post" name="frmByBrand"> <table width="100%" border="0"> <tr> <td width="200">By Brand:</td> <td width="200"><select name="sltBrand"> <option value="0">Select Brand</option> <? $sql = "SELECT DISTINCT Brand FROM cstockitems ORDER BY Brand ASC"; $result = dbQuery($sql); if(dbNumRows($result)) { while($row = dbFetchAssoc($result)) { echo "<option>$row[brand]</option>"; } } else { echo "<option>No Brands Present</option>"; } ?> </select></td> <td width="200"><input type="submit" name="Submit" value="Show" class="button_image" onClick="return CheckShowBrandByBrand();"> </td> </tr> </table> </form></td> </tr> <tr> <td><form name="frmByCategory" method="post" action="index.php?view=showbycategory"> <table width="100%" border="0"> <tr> <td width="200">By Category:</td> <td width="200"><select name="sltCategory"> <option value="0">Select Category</option> <? $sql = "SELECT DISTINCT Category FROM cstockitems ORDER BY Category ASC"; $result = dbQuery($sql); if(dbNumRows($result)) { while($row = dbFetchAssoc($result)) { echo "<option>$row[Category]</option>"; } } else { echo "<option>No Categories Present</option>"; } ?> </select></td> <td width="200"><input type="submit" name="Submit2" value="Show" class="button_image" onClick="return CheckShowBrandByCategory();"></td> </tr> </table> </form></td> </tr> <tr> <td><form name="frmSearchBrand" method="post" action="index.php?view=showbysearch"> <table width="100%" border="0"> <tr> <td width="200">Search:</td> <td width="200"><input type="text" name="txtSearchBrand" size="40"></td> <td width="200"><input type="submit" name="Submit3" value="Search" class="button_image" onClick="return CheckShowBrandBySearch();"></td> </tr> </table> </form></td> </tr> </table> </body> <script> function CheckShowBrandByBrand() { form = window.document.frmByBrand; if (form.sltBrand.selectedIndex == 0) { alert('You have not selected a brand to view details!'); return false; } else { return true; } } function CheckShowBrandByCategory() { form = window.document.frmByCategory; if (form.sltCategory.selectedIndex == 0) { alert('You have not selected a Category to view details!'); return false; } else { return true; } } function CheckShowBrandBySearch() { form = window.document.frmSearchBrand; if (form.txtSearchBrand.value == "") { alert('You have not entered a brand name to search!'); return false; } else { return true; } } </script> My pagination works well here... When I perform another action like a search from my index page, it displays the results well but when I click next or a number in the pagination, it goes to the default pagination of the (list.php) index page. ie It does not maintain the SQL condition of my search-It goes back to the SQL and code of list.php as above <? $rowsPerPage = 5; $sql = "SELECT * FROM cstockitems GROUP BY Brand"; $result = dbQuery(getPagingQuery($sql, $rowsPerPage)); $pagingLink = getPagingLink($sql, $rowsPerPage); ?> HOW DO I MAKE MY PAGINATION WORK FOLLOWING THE SEARCH CONDITION AS FOLLOWS? Below is my search code... <? require_once '../../functions.php'; $searchbrand = $_POST['txtSearchBrand']; $sql = "SELECT * FROM cstockitems WHERE Category LIKE '%$searchbrand%' OR Brand LIKE '%$searchbrand%' "; $rowsPerPage = 10; $result = dbQuery(getPagingQuery($sql, $rowsPerPage)); $pagingLink = getPagingLink($sql, $rowsPerPage); ?> <form action="index.php?view=choice" method="post" name="frmList" id="frmList"> <table width="100%" border="0" align="center" cellpadding="2" cellspacing="1"> <tr align="center" class="title_text"> <td width="400" class="">Brand</td> <td width="400" class="">Category</td> <td width="400">Date Created </td> <td width="200">View</td> <td width="200">Modify</td> </tr> <?php if (dbNumRows($result) > 0) { $i = 0; while($row = dbFetchAssoc($result)) { extract($row); if ($i%2) { $class = 'row1'; } else { $class = 'row2'; } $i += 1; ?> <tr class="<?php echo $class; ?>"> <td width="400"><?php echo $Brand; ?></td> <td width="400"><?php echo $Category; ?></td> <td width="400"><?php echo $DateAddedBrand; ?></td> <td width="200" align="center"><a href="<?php echo $_SERVER['PHP_SELF']; ?>?view=detail&ProductID=<?php echo $ProductID; ?>">Details</a></td> <td width="200" align="center"><a href="javascript:modifyBrand(<?php echo $ProductID; ?>);">Modify</a></td> </tr> <?php } // end while ?> <tr> <td colspan="4" align="center"> <?php echo $pagingLink; ?> </td> </tr> <?php } else { ?> <tr> <td colspan="4" align="center">Your search for <? echo '<strong>'; echo $searchbrand; echo ' '; echo "</strong>"; echo "did not return any brand(s)"; ?></td> </tr> <tr> <td colspan="4" align="center"> </td> </tr> <?php } ?> <tr> <td colspan="4" align="right"> <input name="AddBrand" type="submit" value="Add" class="button_image"> <input type="submit" name="DeleteBrand" value="Delete" class="button_image"> <input name="btnCancel" type="button" id="btnCancel" value="Back" onClick="window.location.href='index.php';" class="button_image"> </tr> </table> </form> I hope it is clear and I provided enough information Link to comment https://forums.phpfreaks.com/topic/122351-help-my-pagination-is-not-working/ Share on other sites More sharing options...
gnawz Posted September 4, 2008 Author Share Posted September 4, 2008 Some body please help me HERE... Link to comment https://forums.phpfreaks.com/topic/122351-help-my-pagination-is-not-working/#findComment-633637 Share on other sites More sharing options...
sasa Posted September 4, 2008 Share Posted September 4, 2008 try <? require_once '../../functions.php'; $searchbrand = ''; if (isset($_POST['txtSearchBrand'])) $searchbrand = $_POST['txtSearchBrand']; elseif (isset($_GET['s'])) $searchbrand = $_GET['s']; $sql = "SELECT * FROM cstockitems WHERE Category LIKE '%$searchbrand%' OR Brand LIKE '%$searchbrand%' "; $rowsPerPage = 10; $result = dbQuery(getPagingQuery($sql, $rowsPerPage)); $pagingLink = getPagingLink($sql, $rowsPerPage, "s=$searchbrand"); ?> etc. Link to comment https://forums.phpfreaks.com/topic/122351-help-my-pagination-is-not-working/#findComment-633725 Share on other sites More sharing options...
gnawz Posted September 8, 2008 Author Share Posted September 8, 2008 Sasa, That was very close and quite genius. I however still have the same problem. The search is ok on the first page but the pagination goes back to the index.php (list.php) on subsequent paginations. I really do not know why it does not maintain the search SQL statement. I will be glad if you helped further. Thanks. Link to comment https://forums.phpfreaks.com/topic/122351-help-my-pagination-is-not-working/#findComment-636420 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.