treehouse : what would you like to learn today?
Web Design Web Development iOS Development

Pagination for Splitting results from mysql

  • Hi everyone

    I need help with implementing a simple pagination feature to my own/custom website, and since I'm really confused I'll explain from basics what I am trying to achieve.

    I have a simple table with 3 columns and 17 entries in my database. The results are returned in a HTML table, each entry in a separate row. Now I want to split the results to show only 5 entries per page.

    I have searched for various tutorials and codes which at the end got me confused and I'm stuck :(

    Anyone can help me to implement such feature in to my page, please?

    here is my code atm:

      <table border="0" cellpadding="4" cellspace="2" class="jobReviews">
      <?php
    
      //connect to the database
      mysql_connect ("localhost","***","***") or die ('Cannot connect to MySQL: ' . mysql_error());
      mysql_select_db ("***") or die ('Cannot connect to the database: ' . mysql_error());
    
      //query
      $query = mysql_query("select title, description, image from jobs") or die ('Query is invalid: ' . mysql_error());
    
      //write the results
      while ($row = mysql_fetch_array($query)) {
    
      ?>
      <tr><td>
      <p style="width:558px; margin-left:7px;">
      <strong><?php echo $row['title']; ?></strong><br/>
      <img src="img/gallery/thumbs/<?php echo $row['image']; ?>" width="188" height="92" /><br /><br />
      <?php echo $row['description']; ?>
      </p>
      </td></tr>
      <?php
      } 
      ?>
      </table>
    
  • This is illustrative. Please don't copy/paste into production code, as there is no checking of the GET request input.

    Grr... not getting to grips with this markdown malarky...

    <table border="0" cellpadding="4" cellspace="2" class="jobReviews">
    <?php
      $page = @$_GET['page'];
      if( !isset( $page ) ) {
        $page = 1;
      }
      mysql_connect ("localhost","***","***") or die ('Cannot connect to MySQL: ' . mysql_error());
      mysql_select_db ("***") or die ('Cannot connect to the database: ' . mysql_error());
      $query = mysql_query("select title, description, image from jobs") or die ('Query is invalid: ' . mysql_error());
      $result = 0;
      while ($row = mysql_fetch_array($query)) {
        if( $result >= $page * 5 || ( $result < ( $page - 1 ) * 5 ) ) {
          $result = $result + 1;
          continue;
        }
    ?>
      <tr>
        <td>
          <p style="width:558px; margin-left:7px;">
            <strong><?php echo $row['title']; ?></strong>
            <img src="img/gallery/thumbs/<?php echo $row['image']; ?>" width="188" height="92" />
            <?php echo $row['description']; ?>
          </p>
        </td>
      </tr>
    <?php
        $result = $result + 1;
      } 
    ?>
    </table>
  • Sorry -- should have mentioned you will need to give links to the other pages.

    $page will show the page they are on, while $result will show you the total number of entries.

    If $page is greater than one, you will want a link back to $page - 1.

    If $page * 5 is less than or equal to $result, you will want a link to $page + 1.

  • Thanks for the help, the results are now limited to 5 on the page.

    Sorry -- should have mentioned you will need to give links to the other pages.

    I have made a link like this following your examples

    < a href="<?php echo $page +1; ?>">Next</ a >

    This goes to my main domain page plus /2 at the end. But page is not found (404). Where are the different pages defined?

  • Sorry I'm still a novice in this stuff.

    So I got the link like this, and it works:

    < a href="articles.php?page=<?php echo $page +1; ?>">Next</ a >

    I hope that's how it should be.

    Thanks for your help.

  • You'll need some conditionals. As I said above:

    If $page is greater than one, you will want a link back to $page - 1.

    If $page * 5 is less than or equal to $result, you will want a link to $page + 1.

    <?php
    if( $page > 1 ) {
    ?>
    <a href="articles.php?page=<?php echo $page - 1; ?>">Previous</a>
    <?php
    }
    if( $page * 5 <= $result ) {
    ?>
    <a href="articles.php?page=<?php echo $page + 1; ?>">Next</a>
    <?php
    }
    ?>