Tycoon Talk
Become a Big fish!
The number 1 forum for online business!
Post topics, ask questions, share your knowledge.
Tycoon Talk is part of Freelancer.com - find skilled workers online at a fraction of the cost.

PHP Forum


You are currently viewing our PHP Forum as a guest. Please register to participate.
Login



Freelance Jobs

Reply
Adding WHERE statement breaks pagination?
Old 09-06-2007, 03:53 PM Adding WHERE statement breaks pagination?
spock9458's Avatar
Novice Talker

Posts: 6
Name: Rob
Trades: 0
I have a perfectly working script that displays my query results in descending order by date, using pagination. Here is the working code:

Code:
<?
//Connection Info omitted
//This checks to see if there is a page number. If not, it will set it to page 1 
if (!(isset($pagenum))) 
{ 
$pagenum = 1; 
} 

//Here we count the number of results 
//Edit $data to be your query 
$data = mysql_query("SELECT * FROM filings") or die(mysql_error()); 
$rows = mysql_num_rows($data); 

//This is the number of results displayed per page 
$page_rows = 15; 

//This tells us the page number of our last page 
$last = ceil($rows/$page_rows); 

//this makes sure the page number isn't below one, or more than our maximum pages 
if ($pagenum < 1) 
{ 
$pagenum = 1; 
} 
elseif ($pagenum > $last) 
{ 
$pagenum = $last; 
} 

//This sets range that we will display in our query 
$max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows;

/////////// Now let us print the table headers ////////////////
echo "<tablewidth=90% border=1cellpadding=3cellspacing=1align=center>
<tr><tdwidth=20% align=centerbgcolor=silver><b>Date Posted</b></td>
<tdwidth=40% style=padding-left:25pxbgcolor=silver><b>Title</b></td>
<tdwidth=20% align=centerbgcolor=silver><b>Link</b></td>
<tdwidth=20% align=centerbgcolor=silver><b>Hearing</b></td></tr>
";


//This is your query again, the same one... the only difference is we add $max into it
$data_p = mysql_query("SELECT * FROM filings ORDER BY date_posted DESC $max") or die(mysql_error()); 

//This is where you display your query results
while($info = mysql_fetch_array( $data_p )) 
{ 
echo "<tr><tdclass=finewidth=20% align=center>$info[date_posted]</td>
<tdclass=finewidth=40% style=padding-left:5px>$info[file_title]</td>
<tdclass=finewidth=20% align=center><ahref=filings/$info[file_name] target=_blank>View / Print</a></td>
<tdclass=finewidth=20% align=center>$info[hearing_year]</td></tr>";
}

echo "</table>";

// This shows the user what page they are on, and the total number of pages
echo " --Page $pagenum of $last-- <p>";

// First we check if we are on page one. If we are then we don't need a link to the previous page or the first page so we do nothing. If we aren't then we generate links to the first page, and to the previous page.
if ($pagenum == 1) 
{
} 
else 
{
echo " <ahref='{$_SERVER['PHP_SELF']}?pagenum=1'> <<-First</a> ";
echo"";
$previous = $pagenum-1;
echo"<ahref='{$_SERVER['PHP_SELF']}?pagenum=$previous'> <-Previous</a> ";
} 

//justaspacer
echo" ---- ";

//Thisdoesthesameasabove, onlycheckingifweareonthelastpage, andthengeneratingtheNextandLastlinks
if ($pagenum == $last) 
{
} 
else {
$next = $pagenum+1;
echo"<ahref='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> ";
echo " ";
echo " <ahref='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> ";
} 
?>

Now all I want to do is modify my query to SELECT only the rows whose "hearing_year" field matches "2006", so I added the WHERE statements to both query lines as shown in red below:

Code:

//This checks to see if there is a page number. If not, it will set it to page 1 
if (!(isset($pagenum))) 
{ 
$pagenum = 1; 
} 

//Here we count the number of results 
//Edit $data to be your query 
$data = mysql_query("SELECT * FROM filings WHERE hearing_year='2006'") or die(mysql_error()); 
$rows = mysql_num_rows($data); 

//This is the number of results displayed per page 
$page_rows = 15; 

//This tells us the page number of our last page 
$last = ceil($rows/$page_rows); 

//this makes sure the page number isn't below one, or more than our maximum pages 
if ($pagenum < 1) 
{ 
$pagenum = 1; 
} 
elseif ($pagenum > $last) 
{ 
$pagenum = $last; 
} 

//This sets range that we will display in our query 
$max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows;

/////////// Now let us print the table headers ////////////////
echo "<tablewidth=90% border=1cellpadding=3cellspacing=1align=center>
<tr><tdwidth=20% align=centerbgcolor=silver><b>Date Posted</b></td>
<tdwidth=40% style=padding-left:25pxbgcolor=silver><b>Title</b></td>
<tdwidth=20% align=centerbgcolor=silver><b>Link</b></td>
<tdwidth=20% align=centerbgcolor=silver><b>Hearing</b></td></tr>
";


//This is your query again, the same one... the only difference is we add $max into it
$data_p = mysql_query("SELECT * FROM filings WHERE hearing_year='2006' ORDER BY date_posted DESC $max") or die(mysql_error()); 

//This is where you display your query results
while($info = mysql_fetch_array( $data_p )) 
{ 
echo "<tr><tdclass=finewidth=20% align=center>$info[date_posted]</td>
<tdclass=finewidth=40% style=padding-left:5px>$info[file_title]</td>
<tdclass=finewidth=20% align=center><ahref=filings/$info[file_name] target=_blank>View / Print</a></td>
<tdclass=finewidth=20% align=center>$info[hearing_year]</td></tr>";
}

echo "</table>";

// This shows the user what page they are on, and the total number of pages
echo " --Page $pagenum of $last-- <p>";

// First we check if we are on page one. If we are then we don't need a link to the previous page or the first page so we do nothing. If we aren't then we generate links to the first page, and to the previous page.
if ($pagenum == 1) 
{
} 
else 
{
echo " <ahref='{$_SERVER['PHP_SELF']}?pagenum=1'> <<-First</a> ";
echo"";
$previous = $pagenum-1;
echo"<ahref='{$_SERVER['PHP_SELF']}?pagenum=$previous'> <-Previous</a> ";
} 

//justaspacer
echo" ---- ";

//Thisdoesthesameasabove, onlycheckingifweareonthelastpage, andthengeneratingtheNextandLastlinks
if ($pagenum == $last) 
{
} 
else {
$next = $pagenum+1;
echo"<ahref='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> ";
echo " ";
echo " <ahref='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> ";
} 
?>

...and now my pagination is broken, as well as my table formatting. Can anyone clue me in as to why? I'll admit I'm a newbie, but this seems pretty basic.

Thanks,
Rob
spock9458 is offline
Reply With Quote
View Public Profile Visit spock9458's homepage!
 
 
Register now for full access!
Old 09-06-2007, 04:43 PM Re: Adding WHERE statement breaks pagination?
solomongaby's Avatar
Webmaster Talker

Latest Blog Post:
How Do You Find Music Online ?
Posts: 522
Name: Gabe Solomon
Location: Romania
Trades: 1
sorry but i don't have time to debug all you're code, and on the first look nothing seams wrong.

The where shouldnt break you're pagination.

Here are a few tips to improve and debug you're code :
- when counting the rows use : SELECT count(idd) as num_rows from .....
then $max_rows= $row['num_row']; ... it should be faster

- echo all the sql_query to see how they look maybe you will spot something
__________________
If you like my posts ... TK is appreciated:)

Please login or register to view this content. Registration is FREE
|
Please login or register to view this content. Registration is FREE
solomongaby is offline
Reply With Quote
View Public Profile Visit solomongaby's homepage!
 
Reply     « Reply to Adding WHERE statement breaks pagination?
 

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off





   
RSS Feed  Feeds: RSS   JS   XML
RSS Feed  Feeds for this forum: RSS   JS   XML



Page generated in 0.25823 seconds with 12 queries