scandalist Posted October 18, 2014 Share Posted October 18, 2014 Hey guys, I'm using the following pagination script from a website I found. I'ts basically a pagination script that takes data from a MySQL database and displays a certain number of sets before placing the next set on a new page. This script works great if I substitute a static value for the data I want returned but If the request is stored in a $POST variable like from an HTML form the data refuses to paginate. It will render the first set of data but will not paginate the rest and only shows blank pages I'm thinking it has something to do with the $POST variable not being set or carrying over to each page but I'm not sure. I truly appreciate the help! <?php /* Place code to connect to your DB here. */ include('config.php'); // include your code to connect to DB. $tbl_name=""; //your table name // How many adjacent pages should be shown on each side? $adjacents = 3; /* First get total number of rows in data table. If you have a WHERE clause in your query, make sure you mirror it here. */ $query = "SELECT COUNT(*) as num FROM $tbl_name"; $total_pages = mysql_fetch_array(mysql_query($query)); $total_pages = $total_pages[num]; /* Setup vars for query. */ $targetpage = "filename.php"; //your file name (the name of this file) $limit = 2; //how many items to show per page $page = $_GET['page']; if($page) $start = ($page - 1) * $limit; //first item to display on this page else $start = 0; //if no page var is given, set start to 0 /* Get data. */ $sql = "SELECT column_name FROM $tbl_name LIMIT $start, $limit"; $result = mysql_query($sql); /* Setup page vars for display. */ if ($page == 0) $page = 1; //if no page var is given, default to 1. $prev = $page - 1; //previous page is page - 1 $next = $page + 1; //next page is page + 1 $lastpage = ceil($total_pages/$limit); //lastpage is = total pages / items per page, rounded up. $lpm1 = $lastpage - 1; //last page minus 1 /* Now we apply our rules and draw the pagination object. We're actually saving the code to a variable in case we want to draw it more than once. */ $pagination = ""; if($lastpage > 1) { $pagination .= "<div class=\"pagination\">"; //previous button if ($page > 1) $pagination.= "<a href=\"$targetpage?page=$prev\">� previous</a>"; else $pagination.= "<span class=\"disabled\">� previous</span>"; //pages if ($lastpage < 7 + ($adjacents * 2)) //not enough pages to bother breaking it up { for ($counter = 1; $counter <= $lastpage; $counter++) { if ($counter == $page) $pagination.= "<span class=\"current\">$counter</span>"; else $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>"; } } elseif($lastpage > 5 + ($adjacents * 2)) //enough pages to hide some { //close to beginning; only hide later pages if($page < 1 + ($adjacents * 2)) { for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) { if ($counter == $page) $pagination.= "<span class=\"current\">$counter</span>"; else $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>"; } $pagination.= "..."; $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>"; $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>"; } //in middle; hide some front and some back elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) { $pagination.= "<a href=\"$targetpage?page=1\">1</a>"; $pagination.= "<a href=\"$targetpage?page=2\">2</a>"; $pagination.= "..."; for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) { if ($counter == $page) $pagination.= "<span class=\"current\">$counter</span>"; else $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>"; } $pagination.= "..."; $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>"; $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>"; } //close to end; only hide early pages else { $pagination.= "<a href=\"$targetpage?page=1\">1</a>"; $pagination.= "<a href=\"$targetpage?page=2\">2</a>"; $pagination.= "..."; for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) { if ($counter == $page) $pagination.= "<span class=\"current\">$counter</span>"; else $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>"; } } } //next button if ($page < $counter - 1) $pagination.= "<a href=\"$targetpage?page=$next\">next �</a>"; else $pagination.= "<span class=\"disabled\">next �</span>"; $pagination.= "</div>\n"; } ?> <?php while($row = mysql_fetch_array($result)) { // Your while loop here } ?> <?=$pagination?> Quote Link to comment Share on other sites More sharing options...
mac_gyver Posted October 18, 2014 Share Posted October 18, 2014 $_POST data is only available on the immediate page request the form submits to. you should be using a $_GET method form, because what you are searching for determines what will be gotten (get) on the page. $_POST should only be used when you alter the state of something on the server. once you have the search term as a $_GET parameter in the url, it's then easy to pass that value in the urls you are making for the pagination. if you do an advanced search on the forum (the snowflake thing to the right of the search box) for http_build_query, along with my username as the Find author, you will find a number of examples showing how to build pagination links that will automatically include any existing get parameters, like a search term, or a search direction... Quote Link to comment Share on other sites More sharing options...
scandalist Posted October 18, 2014 Author Share Posted October 18, 2014 Thanks for the reply. I have changed the POST variables to GET in the example code above but the problem is still there. Is there something else I need to edit to pass the variables through the URL? Quote Link to comment Share on other sites More sharing options...
mac_gyver Posted October 18, 2014 Share Posted October 18, 2014 Is there something else I need to edit to pass the variables through the URL? yes, you will need to alter the code that makes each pagination link so that it includes the search term. my post above contains search instructions (this forum software doesn't pass search terms in the url, so i cannot post a search result for you to use, you will need to actually perform the search yourself) that will find several examples showing a general purpose way of building links using php http_build_query() that does this. Quote Link to comment Share on other sites More sharing options...
scandalist Posted October 18, 2014 Author Share Posted October 18, 2014 Thanks for the help. Ended up using GET like you said and simply appended the variable to my pagination links like this: $pagination.= "<a href=\"$targetpage?page=$next&City=$City\">next</a>"; Quote Link to comment Share on other sites More sharing options...
mac_gyver Posted October 19, 2014 Share Posted October 19, 2014 the suggestion to use http_build_query() was to produce general purpose code for your pagination links that doesn't need to be changed every time you change something else about your urls. what happens if you change the field you are searching, add a dynamic number of results per page, or add the ability to change the sort order? are you going to go into your pagination code and edit the links to add each of these possibilities? the answer to that question should be a no. using http_build_query() to use any existing get parameters, just set the pagination parameter to what you want, and use the combined result to build links would mean that you don't ever need to change the pagination code should anything else about your urls get changed. 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.