Jump to content

Passing variables with pagination - iterating through unique id per link


ushanbb

Recommended Posts

Hi everyone,

I have seen a few topics like this one. Still cant find the specific thing, so I am asking - does anyone know this?

 

I am trying to combine a mysql query with this code I found at php-mysql-tutorial.com.

 

Essentially this is the rub. The pages are working fine, but I am flumoxxed as to how to apply the $imgid to a page (viewing one image per page).

 

The imgid  are in numerical order but do not begin at one, and there may be gaps - eg img 3, 5, 7,8 ,9 and 10 on a 6 page pagination.

I can pass the $page variable because it is a simple increment iteration, but how do I apply the changing $imgid value? so that pp1 has an imgid of 3 passed, pp2 is 5, pp3 is 7 etc. I expect it is something to do with combining a query and an array and applying it, but I'm having a brain-strain at that point.

 

Gratefully, here is my code stripped of excess ( I hope).

 

<?php

 

// back button depending on which gallery is parent

if(!isset($_REQUEST['random'])) {

 

$file= "gallery";

 

$varid = 0;

} else {

$file= "random";

$varid = 1;

}

 

echo "<fieldset><div id=\"back_but\"><a href=\"gallery.php?blog=$file\"> <br /></a></div>";

 

$url = "blog=picture&pics=picdetail&";

 

// how many rows to show per page

$rowsPerPage = 1;

 

// by default we show first page

$pageNum = 1;

 

// if $_GET['page'] defined, use it as page number

if(isset($_GET['page']))

{

    $pageNum = $_GET['page'];

}

 

// counting the offset

$offset = ($pageNum - 1) * $rowsPerPage;

 

 

    $query = "SELECT imgid, title, year, description, thumburl, imgurl, medium, style, clientname FROM images LEFT JOIN mediums ON images.mediumid = mediums.mediumid LEFT JOIN imgstyle ON images.styleid = imgstyle.styleid LEFT JOIN clients ON images.clientid = clients.clientid WHERE imgid = $imgid".

" LIMIT $offset, $rowsPerPage";

 

echo $query;

  $result = mysql_query($query);

    while($row=mysql_fetch_array($result, MYSQL_ASSOC))

 

  {

      $imgid = $row['imgid'];

  $title = $row['title'];

  $year = $row['year'];

      $description = $row['description'];

      $thumburl = $row['thumburl'];

  $medium = $row['medium'];

  $style = $row['style'];

  $client = $row['clientname'];

  }

  ?>

 

<fieldset><?php 

 

// how many rows we have in database

$query  = "SELECT COUNT(imgid) AS numrows FROM images WHERE tarot = $varid";

$result  = mysql_query($query) or die('Error, query failed');

$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=\"$self?$url&page=$page\">$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=\"$self?$url&page=$page\">[Prev]</a> ";

 

  $first = " <a href=\"$self?$url&page=1\">[First Page]</a> ";

}

else

{

  $prev  = ' '; // we're on page one, don't print previous link

  $first = ' '; // nor the first page link

}

 

if ($pageNum < $maxPage)

{

  $page = $pageNum + 1;

  $next = " <a href=\"$self?$url&page=$page\">[Next]</a> ";

 

  $last = " <a href=\"$self?$url&page=$maxPage\">[Last Page]</a> ";

}

else

{

  $next = ' '; // we're on the last page, don't print next link

  $last = ' '; // nor the last page link

}

 

// print the navigation link

echo $first . $prev . $nav . $next . $last;

 

 

 

?></fieldset>

Although I am not sure I totally understand your request. I believe the best solution to your problem is to use sessions. Then you can make a query to the database and extract all of the $imgid 's at the same time and feed them to an array. Save that array in the user’s session and then access them by page 6 at a time. Then you are reducing the number of request that you are making to the database and you will have an array with the correct $imgid 's. You could even cache this value and have it updated every so often to further reduce the number of queries being processed on the database.

Thanks WolfRage - Yes, I can see how that might work - store all the $imgid's into a session array and do the maths according to which page it is. I'll play with it - let you know how I go.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.