A pagenum query - works first page, not second tho...

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
simonmlewis
DevNet Master
Posts: 4435
Joined: Wed Oct 08, 2008 3:39 pm
Location: United Kingdom
Contact:

A pagenum query - works first page, not second tho...

Post by simonmlewis »

Hi

I've run this sort of code before. A search results page that has page numbers, but this will not work.

It produces the page numbers, but when you click on page 2, it displays nothing.

Am I doing something really badly wrong here??

Code: Select all

<?php
$category = $_POST['category'];
$searchadv = $_POST['searchadv'];
$pricemin = $_POST['pricemin'];
$pricemax = $_POST['pricemax'];
 
echo "<div class='head'>Advanced Search</div>
You can be specific here with your search options.<br/><br/>
<form method='post' action='index.php?page=searchadv&menu=home'>
<div class='infoheader' style='border-top: 1px solid #000; margin-bottom: 3px;'>SELECT A CATEGORY</div>
<select name='category'>";
 
include "dbconn.php";
$result = mysql_query ("SELECT DISTINCT category FROM products ORDER BY category ASC");
while ($row = mysql_fetch_object($result))
      {
            echo "<option value='$row->category'>$row->category</option>";
            }
    mysql_free_result($result);
    mysql_close($sqlconn);
echo "</select>
<br/><br/>
<div class='infoheader' style='border-top: 1px solid #000; margin-bottom:3px;'>PRICE RANGE</div>
        ";
if ($pricemin != NULL && $pricemax != NULL) { echo "<span class='advancedvariable'>&nbsp;&nbsp;&raquo;&nbsp;&nbsp;From £$pricemin To £$pricemax</span><br/>";}
echo "
<font color='#000000'>FROM</font> <select name='pricemin'>
<option value='5.00'>£5.00</option>
<option value='6.00'>£6.00</option>
<option value='7.00'>£7.00</option>
<option value='8.00'>£8.00</option>
<option value='9.00'>£9.00</option>
<option value='10.00'>£10.00</option>
<option value='11.00'>£11.00</option>
<option value='12.00'>£12.00</option>
<option value='13.00'>£13.00</option>
<option value='14.00'>£14.00</option>
<option value='15.00'>£15.00</option>
<option value='20.00'>£20.00</option>
<option value='25.00'>£25.00</option>
<option value='30.00'>£30.00</option>
<option value='35.00'>£35.00</option>
<option value='40.00'>£40.00</option>
<option value='50.00'>£50.00</option>
<option value='60.00'>£60.00</option>
<option value='70.00'>£70.00</option>
<option value='80.00'>£80.00</option>
<option value='90.00'>£90.00</option>
<option value='100.00'>£100.00</option>
</select>
&nbsp;
<font color='#000000'>TO </font><select name='pricemax'>
<option value='5.00'>£5.00</option>
<option value='6.00'>£6.00</option>
<option value='7.00'>£7.00</option>
<option value='8.00'>£8.00</option>
<option value='9.00'>£9.00</option>
<option value='10.00'>£10.00</option>
<option value='11.00'>£11.00</option>
<option value='12.00'>£12.00</option>
<option value='13.00'>£13.00</option>
<option value='14.00'>£14.00</option>
<option value='15.00'>£15.00</option>
<option value='20.00'>£20.00</option>
<option value='25.00'>£25.00</option>
<option value='30.00'>£30.00</option>
<option value='35.00'>£35.00</option>
<option value='40.00'>£40.00</option>
<option value='50.00'>£50.00</option>
<option value='60.00'>£60.00</option>
<option value='70.00'>£70.00</option>
<option value='80.00'>£80.00</option>
<option value='90.00'>£90.00</option>
<option value='100.00'>£100.00</option></select><br/><br/>
 
<div class='infoheader' style='border-top: 1px solid #000; margin-bottom: 3px;'>KEYWORD</div>
<input type='text' name='searchadv' class='searchbar'><br/><br/>
 
        <div class='infoheader' style='border-top: 1px solid #000'><input type='submit' value='Search' style='width:100px'></div>
        
        </form>";
//calculations for the search results
 
include "dbconn.php";
$rowsPerPage = 2;
 
// by default we show first page
$pageNum = 1;
 
// if $_GET['pagenum'] defined, use it as page number
if(isset($_GET['pagenum']))
{
    $pageNum = $_GET['pagenum'];
}
 
// counting the offset
$offset = ($pageNum - 1) * $rowsPerPage;
    
$result = mysql_query ("SELECT * FROM products WHERE category = '$category' AND title LIKE '%$search%' AND (price BETWEEN '$pricemin' AND '$pricemax') LIMIT $offset, $rowsPerPage") or die (mysql_error());
while ($row = mysql_fetch_object($result))
      {
echo "
<div class='cat_prodlistbox'>
<div class='cat_producttitle'>";
 
                    $position=43; //Defines how many characters will be displayed from content field.
$postcontent = substr($row->title,0,$position);
echo "$postcontent ...</div>
 
            <a href='index.php?page=product&menu=categ&category=$row->category&product=$row->id' title='Look at the $row->title'><img src='images/productphotos/$row->photoprimary' border='0' /></a>
            </div>
                    
            ";
            }   
    mysql_free_result($result);
    
    echo "<div style='clear:both' />";
    $query   = "SELECT COUNT(id) AS numrows FROM products WHERE category = '$category' AND title LIKE '%$search%' AND (price BETWEEN '$pricemin' AND'$pricemax')";
    
$result  = mysql_query($query) or die(mysql_error());
$row     = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];
    // how many pages we have when using paging?
$maxPage = ceil($numrows/$rowsPerPage);
 
// print the link to access each page
$self = $_SERVER['PHP_SELF'];
$nav  = '';
 
for($page = 1; $page <= $maxPage; $page++)
{
   if ($page == $pageNum)
   {
      $nav .= " $page "; // no need to create a link to current page
   }
   else
   {
      $nav .= " <a href=\"index.php?page=searchadv&menu=home&pagenum=$page\" class='bodylink'>$page</a>";
   }
}
 
// creating previous and next link
// plus the link to go straight to
// the first and last page
 
if ($pageNum > 1)
{
   $page  = $pageNum - 1;
   $prev  = " <a href=\"index.php?page=searchadv&menu=home&pagenum=$page\" class='bodylink'>[Prev]</a> ";
 
   $first = " <a href=\"index.php?page=searchadv&menu=home&pagenum=1\" class='bodylink'>[First Page]</a>";
}
else
{
   $prev  = '&nbsp;'; // we're on page one, don't print previous link
   $first = '&nbsp;'; // nor the first page link
}
 
if ($pageNum < $maxPage)
{
   $page = $pageNum + 1;
   $next = " <a href=\"index.php?page=searchadv&menu=home&pagenum=$page\" class='bodylink'>[Next]</a>";
 
   $last = " <a href=\"index.php?page=searchadv&menu=home&pagenum=$maxPage\" class='bodylink'>[Last Page]</a>";
}
else
{
   $next = '&nbsp;'; // we're on the last page, don't print next link
   $last = '&nbsp;'; // nor the last page link
}
 
// print the navigation link
echo "<div class='navpages'>" . $first . $prev . $nav . $next . $last . "</div>";
    mysql_free_result($result);
    mysql_close($sqlconn);
?>
Love PHP. Love CSS. Love learning new tricks too.
All the best from the United Kingdom.
User avatar
Darhazer
DevNet Resident
Posts: 1011
Joined: Thu May 14, 2009 3:00 pm
Location: HellCity, Bulgaria

Re: A pagenum query - works first page, not second tho...

Post by Darhazer »

I think this is because the price range ($pricemin and $pricemax) are not posted to the next page. Same for category and keywords. They are retrieved from post, and they are not included in the links. Either store them in a session, or add them in URL and load them both from POST and GET
User avatar
Eran
DevNet Master
Posts: 3549
Joined: Fri Jan 18, 2008 12:36 am
Location: Israel, ME

Re: A pagenum query - works first page, not second tho...

Post by Eran »

You've received plenty of help on your other thread - viewtopic.php?f=1&t=105180&st=0&sk=t&sd=a

Please don't double post
Post Reply