What's Wrong with My Script?

Discussion in 'PHP' started by Masterful, Sep 16, 2008.

  1. #1
    What's wrong with my pagination script (below)?

    It displays navigation links like this:

    1 2 3 > >>

    Even if no results are returned from the database, the pagination links are still there:

    1 2 3 > >>

    If 2 or 3 are clicked, they go to blank pages.

    I've played with $range but the problem remains. When I change $range to 0, for example, the pagination links display like the following, even if no results are returned:

    1 > >>

    If ">" or ">>" are clicked, they lead to blank pages.

    Anyone know how I can fix this? If no results are returned, I don't want links to blank pages.

    Here's the full script. However, all you need is the bottom part.


    <?php  
    
    // database connection info  
    $conn = mysql_connect('localhost','root') or trigger_error("SQL", E_USER_ERROR);  
    $db = mysql_select_db('ctyi', $conn) or trigger_error("SQL", E_USER_ERROR);
       
    // find out how many rows are in the table   
    $sql = "SELECT COUNT(*) FROM tcoupon";  
    $result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR);  
    $r = mysql_fetch_row($result);  
    $numrows = $r[0];  
       
    // number of rows to show per page  
    $rowsperpage = 5;  
    // find out total pages  
    $totalpages = ceil($numrows / $rowsperpage);  
       
    // get the current page or set a default  
    if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) {  
    // cast var as int  
    $currentpage = (int) $_GET['currentpage'];  
    } else {  
    // default page num  
    $currentpage = 1;  
    } // end if  
       
    // if current page is greater than total pages...  
    if ($currentpage > $totalpages) {  
    // set current page to last page  
    $currentpage = $totalpages;  
    } // end if  
    // if current page is less than first page...  
    if ($currentpage < 1) {  
    // set current page to first page  
    $currentpage = 1;  
    } // end if  
       
    // the offset of the list, based on current page   
    $offset = ($currentpage - 1) * $rowsperpage; 
    
    // get the info from the db   
    $sql = "SELECT * FROM wherever LIMIT $offset, $rowsperpage"; 
    
    $result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR);  
       
    if(mysql_num_rows($result) < 1)
    
    {
    echo "<p>No results.</p>";
    }
    
    else
    
    {
    
    while($row = mysql_fetch_assoc($result))
    {
    
    // echo data 
    echo "Results";
     
    } // end while
    } // end else
    
    
    
    
    
    
    
    
    
    
       
    /******  build the pagination links ******/  
    
    // if not on page 1, show back links  
    if ($currentpage > 1) {  
    // show << link to go back to page 1  
    echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'><<</a> ";  
    // get previous page num  
    $prevpage = $currentpage - 1;  
    // show < link to go back to 1 page  
    echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'><</a> ";  
    } // end if  
    
    // range of num links to show  
    $range = 3; 
      
    // loop to show links to range of pages around current page  
    for ($x = (($currentpage - $range) - 1); $x < (($currentpage + $range) + 1); $x++) {  
    // if it's a valid page number...  
    if (($x > 0) && ($x <= $totalpages)) {  
    // if we're on current page...  
    if ($x == $currentpage) {  
    // 'highlight' it but don't make a link  
    echo " [$x] ";  
    // if not current page...  
    } else {  
    // make it a link  
    echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> ";  
    } // end else  
    } // end if   
    } // end for  
               
    // if not on last page, show forward and last page links      
    if ($currentpage != $totalpages) {  
    // get next page  
    $nextpage = $currentpage + 1;  
    // echo forward link for next page   
    echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'>></a> ";  
    // echo forward link for lastpage  
    echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>>></a> ";  
    } // end if  
    
    /****** end build pagination links ******/  
    
    ?> 
    PHP:
     
    Masterful, Sep 16, 2008 IP
  2. nabz245

    nabz245 Well-Known Member

    Messages:
    677
    Likes Received:
    18
    Best Answers:
    0
    Trophy Points:
    110
    #2
    Do:
    Echo mysql_num_rows($result);

    So you can see the value of it when there are no results found.

    Then compare it to either show or not show the pagination.
     
    nabz245, Sep 16, 2008 IP
  3. Masterful

    Masterful Well-Known Member

    Messages:
    1,653
    Likes Received:
    28
    Best Answers:
    0
    Trophy Points:
    140
    #3
    Thank you, Nabz245, for your response. However, can you be a little more specific, please? :)
     
    Masterful, Sep 16, 2008 IP